strtotime在转换日期字符串时返回false

时间:2014-11-13 12:37:21

标签: php datetime laravel strtotime

使用php 5.4.34和 Laravel 4 与apache 2.2.22和Ubuntu。

我尝试将字符串'2050-10-13'转换为日期,并且始终返回false。

var_dump(strtotime('2050-10-13')); ==> false
var_dump(strtotime('13-10-2050')); ==> false
var_dump(strtotime('2050/10/13')); ==> false
var_dump(strtotime('13/10/2050')); ==> false

我之前尝试过添加:

date_default_timezone_set('Europe/Brussels');

OR

date_default_timezone_set('Europe/Paris');

我没有改变任何事情。

app/config/app.php我有:

'timezone' => 'UTC',
'locale' => 'en',

可能是什么问题?

3 个答案:

答案 0 :(得分:4)

2050无法在32位系统内部表示 时间戳限制为2038,因为32位整数的最大值为2,147,483,647,即:2038-01-19T03:14:08+0000Z

您刚刚遇到了year2038错误。

如何修复

不要使用时间戳。而是使用更强大的库,例如new \DateTime('2050-10-13');,当然还有数据库使用Date字段。

答案 1 :(得分:2)

问题是你使用的功能在32位系统上将来无法应对日期。

使用DateTime代替它会非常愉快地处理这些日期: -

$date = new \DateTime('2050-10-13');
var_dump($date);

Demo

答案 2 :(得分:1)

在动态答案中添加答案。时间戳限制为2038,因为32位整数的最大值为2,147,483,647。如果你添加+1,你得到-2,147,483,647。从01-01-1970 00:00:00开始的2,147,483,647秒是2038年1月19日。如果再加一秒,你会在1902年的某个地方得到一个日期。

这次运气不好。