我有一些用于日期格式化的PHP代码,如下所示
$date = date('Y-m-d', strtotime('2076-11-26'));
echo $date;
但是对于某些日期返回的值是1970-01-01,我真的很担心这个问题,上面是我1970年作为年份的一个示例日期,我将时区设置为date_default_timezone_set('UTC');,但仍然无济于事,问题出在我的实时服务器上,虽然它在生产服务器上运行良好。
答案 0 :(得分:1)
这是因为2076年不在32位Unix时代。它以2038
结束,如果您使用的是32位版本,那么您将无法处理超出该范围的日期。
来自strtotime()
的文档:
时间戳的有效范围通常是从星期五,12月13日 1901 20:45:54 UTC到星期二,1月19日 2038 03:14:07 UTC。 (这些是与32位有符号整数的最小值和最大值相对应的日期。)
您可以使用DateTime类代替,这是为了解决此限制而引入的。它使用不同的机制来存储时间组件,因此您不会遇到此问题。它可以处理非常广泛的日期:
完成DateTime类时,同样如下:
$date = new DateTime('2076-11-26');
echo $date->format('Y-m-d');
输出:
2076-11-26