0

今年我在 PHP 中遇到了奇怪的时间/日期问题。代码根本没有改变,我的日期被窃听了。

代码例如:

$date = strtotime($order['date']);

$dateNew = date('Y-m-d h:i A', $date);

print $dateNew;

1969-12-31 07:00 PM出于某种原因返回,尽管如此:

print $order['date'];

退货2013-01-12 18:25:43

我很困惑,因为我很确定我的代码是正确的。

我敢让你解决这个混蛋!

4

3 回答 3

1

“1969-12-31 07:00 PM”的意外日期意味着 date() 出现问题。

您的 strototime($order['date']) 可能返回 false (未能将其解析为 unix 时间戳)。

试试这个并确保它返回一个 int (不是假的)

 var_dump($order['date'], strtotime($order['date'])); 

查看日期的错误状态:http: //php.net/date 查看strtotime的返回值:http: //php.net/strtotime

于 2013-01-14T19:30:40.180 回答
1

函数 strtotime() 用于将英语转换为日期格式。

该函数期望得到一个包含英文日期格式的字符串,并将尝试将该格式解析为 Unix 时间戳(自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数),相对于现在给出的时间戳,或如果没有提供现在的当前时间。

由于我不知道您的 $order 变量的真正含义是什么,我将建议 2 个解决方案:

也许您可以避免使用 strtotime 函数并将其直接替换为 date() ,如下所示:

$order = ['date' => '2013-01-12 18:25:43'];
$date = date($order['date']);

它在这里运行良好:http: //codepad.viper-7.com/cbNA87

或者,如果它不起作用考虑使用mktime(),它会将日期转换为自纪元以来的秒数。

Unix 纪元是所有时间戳的参考点。PHP 以秒为单位计算从该日期开始的时间。应该为空,$date并且您的服务器位于美国东海岸,因此它返回时代:)

于 2013-01-14T19:29:02.720 回答
1

当没有合适的日期时,PHP 返回日期 1969-12-31。所以如果你这样做了

$date = 0;
$dateNew = date('Y-m-d', strtotime($date));

您的结果将是 1969-12-31,因为那是默认的 Unix 纪元时间。http://php.net/manual/en/function.time.php

于 2013-01-14T19:30:06.970 回答