【问题标题】:Inconsistent data and bad answers using strtotime and date使用 strtotime 和 date 的不一致数据和错误答案
【发布时间】:2012-10-01 20:11:45
【问题描述】:

使用 PHP 5.3 并给出字符串 Sat, 20 Oct 2012 05:00:00 GMT:

print $start;
$start = strtotime($start);
var_dump($start);
$hour = date('H:i A', $start);
die($hour);

我程序中的代码 sn-p 返回:

Sat, 20 Oct 2012 05:00:00 GMT
int(1350709200)
00:00 AM

var_dump 正确,但日期返回错误答案。

还要注意,将 sn-p 更改为读取:

print $start;
$start = strtotime($start);
die($start);
$hour = date('H:i A', $start);
die($hour);

返回:

Sat, 20 Oct 2012 05:00:00 GMT

第一个骰子返回一个空字符串,一个空值,我只能假设它实际上是一个布尔值 FALSE。

所以我在这里实际上遇到了两个不同的问题。根据我是var_dump 还是死亡,相同的答案会返回两个不同的内容,第二个是该日期似乎收到了 FALSE 答案,而不是 var_dump 答案。

帮助?

【问题讨论】:

  • 我会说使用die() 来调试变量不是要走的路。相反,如果您想调试变量然后终止程序,请使用var_dump($foo); die();。
  • 另外,我猜你确实意识到die() 结束了你的脚本;这使得脚本仅在您的第二个示例中运行到第 3 行。后面的任何事情都不会被执行。
  • 可能与时区有关。您的系统设置为哪个时区,您的 php.ini 设置为哪个时区?
  • 你为date.default_timezone设置了哪个时区?
  • 尝试添加 date_default_timezone_set('UTC');在代码之前,应该告诉你它是否是时区问题

标签: php date strtotime


【解决方案1】:

正如您所说,您将时区设置为美国/芝加哥。当您调用 strtotime 时,您在字符串中明确指定 GMT。然后,当您将时间戳放入 Date 时,它​​会获取时间戳并为您提供美国/芝加哥的时间,比格林威治标准时间早 5 小时,这就是为什么它是 00:00AM。

您使用的是 5.3。我建议使用DateTime 对象而不是strtotime() 和date()。使用时区等更容易一些,并且 var_dumps 很有用。从用户输入或数据库值创建一个 DateTime,然后在代码中传递它而不是时间戳。

【讨论】:

  • 我试图在上午/下午使用 24 小时制。愚蠢的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多