【问题标题】:php - getting date time using DateTime return different value from date() functionphp - 使用 DateTime 获取日期时间从 date() 函数返回不同的值
【发布时间】:2018-11-28 04:59:28
【问题描述】:

我正在尝试使用 Carbon 或 DateTime 类获取当前时间戳 我得到错误的日期但是当我使用 date() 函数时它返回正确的日期 我在 win server 2012 上运行代码 这是我的代码

dd([
    'Carbon::now()->format("Y-m-d H:i:s P")' => Illuminate\Support\Carbon::now()->format('Y-m-d H:i:s P'), 
    'DateTime()->format("Y-m-d H:i:s P")' => (new DateTime())->format('Y-m-d H:i:s P'), 
    'date("Y-m-d H:i:s P")' => date('Y-m-d H:i:s P'),
    'date("Y-m-d H:i:s P",microtime(true))' => date("Y-m-d H:i:s P", microtime(true)),
    'date("Y-m-d H:i:s P", time())' => date("Y-m-d H:i:s P", time()),
    'Carbon::now()->getTimestamp()' => Illuminate\Support\Carbon::now()->getTimestamp(),
    'microtime()' => microtime(true),
    'time()' => time(),
]);

这是我得到的输出

[
  "Carbon::now()->format("Y-m-d H:i:s P")" => "2018-06-25 22:41:59 +03:00"
  "DateTime()->format("Y-m-d H:i:s P")" => "2018-06-25 22:41:59 +03:00"
  "date("Y-m-d H:i:s P")" => "2018-06-19 11:59:22 +03:00"
  "date("Y-m-d H:i:s P",microtime(true))" => "2018-06-25 22:41:59 +03:00"
  "date("Y-m-d H:i:s P", time())" => "2018-06-19 11:59:22 +03:00"
  "Carbon::now()->getTimestamp()" => 1529955719
  "microtime()" => 1529955719.4257
  "time()" => 1529398762
]

服务器时间与日期函数的值相同

【问题讨论】:

  • 您好,您是在本地服务器上执行此操作的,如果是,您检查过服务器日期时间吗?
  • 它不在本地服务器上
  • date("Y-m-d H:i:s P", microtime(true))returns DateTime() 的确切时间。错了吗?
  • date("Y-m-d H:i:s P", microtime(true)) 与 DateTime 类一样返回错误的日期
  • 总而言之,问题可能是由于世界时间单调值的旧错误(php.net/manual/ru/function.microtime.php 的杰米评论)。你能检查一下他在说什么,是否适用于你的服务器?

标签: php datetime unix-timestamp php-carbon


【解决方案1】:

这是一个配置问题。 您有两种方法可以在 PHP 中获取 UNIX 时间戳:microtime(true)time()CarbonDateTime 在内部使用 microtime(true)

这里有一些关于它们的实现的细节:https://stackoverflow.com/a/11890155/1921796

【讨论】:

  • 链接答案中的信息很棒但是...这可以解释 6 天的差异吗? (这是一个诚实的问题!)
  • @ÁlvaroGonzález 没有代码和环境很难调试。我认为这是 Windows Server 2012 的 PHP 中的错误。我们可以跟踪 microtime() 到函数 get_time_funclxr.room11.org/xref/php-src%40master/win32/time.c#33 在这里您可以看到 Windows Server 2012 和 Windows 8 的特殊 if 语句,看起来它有错误或什么像这样。如果您可以复制,请将其报告至bugs.php.net
【解决方案2】:

你可以尝试使用

Carbon::today() 

而不是使用 Carbon::now。这个对我有用 。

【讨论】:

  • 如果我想要另一种方法来获取正确的日期,我可以使用 date 函数,但我必须解决问题,因为每个包都使用 DateTime,否则 Carbon Class 会得到错误的日期
【解决方案3】:

您是否尝试在脚本顶部设置时区?您可能会遇到会话与服务器时区问题:

date_default_timezone_set ('whatevertimezone');

【讨论】:

  • 我不认为时区是问题,因为时区会改变时间而不是日期 2018-06-19 - 2018-06-25 如问题所示,尽管我尝试更改时区问题依然出现
猜你喜欢
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多