用PHP转换的01-01-2039之后的日期显示为01-01-1970

时间:2020-04-11 12:22:11

标签: php date strtotime

我已经使用php date()函数将日期转换为01-01-2039:

...
class Book(models.Model):
    title =models.CharField(max_length =255)
    author =models.CharField(max_length =255)
    genre =models.CharField(max_length=255)
    date=models.DateTimeField(auto_now_add =True)
    owner =models.ForeignKey(get_user_model(),on_delete =models.CASCADE,)
...

输出显示为:01-01-1970

有什么解决办法吗?

2 个答案:

答案 0 :(得分:0)

评论对话中的答案

问题是由Unix Timestamp Epoch problem引起的。

本机PHP的解决方案是使用正确处理此特定整数溢出的64位PHP版本。

echo (PHP_INT_SIZE===8)?"64 bit ":"32 bit ";

上面的代码显示了PHP版本。

如果存在32位PHP,则需要用64位PHP代替

答案 1 :(得分:0)

除了@Martin的答案外,我还要指出使用strtotime时某些日期格式引起的歧义。

manual中:

通过查看 m / d / y d-m-y 格式的

日期可以消除歧义 各个组件之间的分隔符:如果分隔符是 斜线(/),则假定为美国 m / d / y ;而如果 分隔符是破折号(-)或点(。),然后是欧洲 d-m-y 格式 假设。但是,如果年份以两位数格式给出,并且 分隔符为破折号(-),日期字符串被解析为 y-m-d

为避免潜在的歧义,最好使用ISO 8601( YYYY-MM-DD ) 日期或DateTime::createFromFormat()

$dt = DateTime::createFromFormat('d-m-Y', '01-01-2039');
echo $dt->format('d-m-Y');