PHP DATE strtotime date“0001-01-01”

时间:2011-10-03 07:43:09

标签: php

大家好,有没有办法将日期 0001-01-1 转换为时间格式?我试图使用php函数strtotime("0001-01-01"),但它返回false。

我的目标是计算从日期开始的日期: 0001-01-01 2011-01-01

6 个答案:

答案 0 :(得分:1)

使用DateTime类。 strtotime返回一个时间戳,在你的情况下,它将超出int bounds。

答案 1 :(得分:1)

正如Ignacio Vazquez-Abrams评论的那样,在公历采用之前的日期会有问题:

  • 公历在不同国家(1582年至1929年)的不同时间采用。根据维基百科,一些语言环境仍然使用儒略历。
  • 需要“删除”天以切换到公历,并且各国之间的确切“缺失”日期不同(例如1752年9月的失踪天数)。一些国家试图逐步改变(通过删除2月29日几年);瑞典将返回切换到朱利安日历以“避免混淆”,导致February 30一年。
  • 年份并不总是从1月1日开始计算(这已经留下了UK tax year之类的遗产。
迈克尔波特伍德的帖子The Amazing Disappearing Days给出了一个合理的总结。

简而言之,你必须准确地知道“1月1日公元1”对于你的问题有什么意义。天文学家使用Julian Day Number(与朱利安历法不完全相关)来避免这个问题。

编辑:当事情声称使用“预感格里高利历”时,您甚至必须小心。这是假设是向后延伸的公历,但是在Symbian上,1600年之前观察旧的闰年规则(即Symbian的“1200年”不是闰年,在公历中,在公历中它是。)

答案 2 :(得分:0)

我担心它不会工作,因为strtotime将字符串更改为时间戳,其最低值为0,而它在1970-01-01 ...不能低于...

date('Y-m-d', 0);

答案 3 :(得分:0)

从手册:

  

如果以两位数格式指定年份编号,则00-69之间的值将映射到2000-2069和70-99到1970-1999。有关32位系统的可能差异,请参阅下面的注释(可能的日期可能会在2038-01-19 03:14:07结束)。

您可能需要'DateTime::createFromFormat'代替this

另请注意,在32位版本的PHP上,您不能低于1901。

答案 4 :(得分:0)

你不能这样做。以下是如何执行此操作的一种选择。

$date1= "2011-01-01";
$date2 = "2011-10-03";

//calculate days between dates

$time_difference = strtotime($date2) - strtotime($date1); 

现在你可以在几秒钟内获得时差,你可以得到几天,几小时,几分钟,几秒钟。

答案 5 :(得分:-1)

你不能使用strtotime函数,因为这个函数返回时间戳,时间戳从1970年开始,所以我建议你以不同的方式搜索