从服务器获取准确的日期和时间(防止本地时间)

我一直在尝试使用 Date.Now() Carbon :: now()等不同方法从服务器获取时间,但是这种方法存在问题访问者可以轻松更改其计算机时间,并且服务器上的返回响应将根据访问者在计算机上的时间而变化。


这就是我实际上想要做的

数据库中有6个不同的问题,我想在不同的日子展示。

例如:我想在2019年11月20日展示第1个问题,在2019年11月24日,我想展示第2个问题

这里的问题是,如果访客将日期更改为11月24日,他将能够提前看到问题,而我只希望他们在系统中指定的日期知道该问题。

这是我将回复发送回我的A​​JAX呼叫的方式。

public function getSer(Request $request)
{
    $now = new DateTime('now',new DateTimezone('America/New_York'));
    return response()->json($now);
}

返回的时间基于本地客户端时间而不是服务器。

我也尝试了以下方法:

$question = Questions::where('question_start','<=',Carbon::now('America/New_York'))->where('question_end','>=',Carbon::now('America/New_York'))->first();
        dd($question);

但是结果随着我更改操作系统日期而改变

myqq519334668 回答:从服务器获取准确的日期和时间(防止本地时间)

解决方案很简单:

  

在服务器上执行日期/时间检查并提出问题

类似这样的东西:

<?php
$question_one_start = DateTime::createFromFormat('Y-m-d H:i:s','2019-11-20 00:00:00',new DateTimezone('America/New_York'));
$question_one_end = clone $question_one_start;
$question_one_end->modify('+1 day');
$now = new DateTime('now',new DateTimezone('America/New_York'));
if($now >= $question_one_start && $now < $question_one_end){
    echo "Question output here.";
}
else if( ... ) {
    ....
}

使用此方法,您无需在客户端上执行任何类型的日期/时间检查。

,

日期/时间演示是一个客户端/ UI问题。客户端应采用服务器返回的时间(无论是否使用UTC),并将其转换为客户端的本地时区。

由于更新了问题而进行了修改:我仍然看不到该问题。服务器负责提取直到(我假设)当前日期为止的问题。客户的日期/时间不重要。服务器仍将仅获取并返回当前日期的问题。如果客户将日期更改为2100年,则不会影响服务器正在执行的查询。

问题可能出在让客户端指定日期/时间查询范围而不是服务器吗?

本文链接:https://www.f2er.com/3078649.html

大家都在问