【问题标题】:Get accurate date and time from the server ( Prevent local time )从服务器获取准确的日期和时间(防止本地时间)
【发布时间】:2019-11-19 03:13:21
【问题描述】:

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


这就是我真正想要做的事情

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

例如:2019 年 11 月 20 日,我想展示问题 #1,而 2019 年 11 月 24 日,我想展示问题 #2

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

这就是我向我的 AJAX 调用发送回响应的方式。

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);

但是随着我在操作系统上更改日期,结果会发生变化

【问题讨论】:

  • 您的用例是什么?您应该信任用户的日期和时间,但通过实施日期/时间检查来防止人们在服务器上做事。因此,如果他们请求的资源在特定时间之前不可用,那么您的服务器将返回 401 未授权,然后在满足日期/时间时返回 200。 UI 将阻止根据设备的时间显示此资源的选项。如果他们的时间不同步,哦,好吧。如果设备时间不正确,现在大多数东西都不起作用。
  • 您在服务器上使用例如 PHP 创建的日期时间独立于客户端计算机。我确定您忘记了问题中的一些细节。
  • 问题已更新,如有任何混淆,请检查并抱歉。
  • 还是不清楚。 Date.Now() 看起来像 JS,所以这意味着您使用客户端日期/时间。在 PHP(在服务器上)中,您将获得服务器时间。
  • 您的 PHP/网络服务器是在您的计算机本地运行还是在远程服务器上运行?

标签: php laravel date datetime


【解决方案1】:

解决方法很简单:

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

类似这样的:

<?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( ... ) {
    ....
}

有了这个,您不需要在客户端上执行任何类型的日期/时间检查。

【讨论】:

  • 我已经更新了问题,希望现在更清楚一点
  • 我在本地环境中测试并得到错误的结果,非常感谢。
【解决方案2】:

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

由于更新的问题而编辑:我仍然没有看到问题。服务器负责获取截至(我假设)当前日期的问题。客户的日期/时间是什么并不重要。服务器仍将仅获取并返回当前日期的问题。如果客户端将日期更改为 2100 年,这不会影响服务器正在执行的查询。

也许问题是您让客户端指定日期/时间查询范围,而不是服务器?

【讨论】:

  • 我并不想将时间转换为本地时间,我只想在设置的任何时区显示服务器的时间。
  • 这听起来很矛盾,但也许我错过了什么。
  • 问题已更新,如有任何混淆,请检查并抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 2013-04-26
相关资源
最近更新 更多