Php 查找两个日期之间的天数时出错

Php 查找两个日期之间的天数时出错,php,Php,我试着找出1970年以前的两个日期之间的天数 $ref = strtotime("1776-08-08"); $date = strtotime("1968-12-07"); $day_diff =floor(($date - $ref)/(60*60*24)); echo $day_diff; // output i got: -390 //should be 70247 从 时间戳的有效范围通常是从1901年12月13日星期五20:45:54 UTC到2038年1月19日星期二

我试着找出1970年以前的两个日期之间的天数

$ref = strtotime("1776-08-08");
$date = strtotime("1968-12-07");

$day_diff =floor(($date - $ref)/(60*60*24));

echo $day_diff;


// output i got:
-390

//should be 
70247

时间戳的有效范围通常是从1901年12月13日星期五20:45:54 UTC到2038年1月19日星期二03:14:07 UTC。(这些是与32位有符号整数的最小值和最大值相对应的日期。)此外,并非所有平台都支持负时间戳,因此您的日期范围可能被限制为不早于Unix历元。这意味着,例如1970年1月1日之前的日期将不适用于Windows、某些Linux发行版和一些其他操作系统。PHP5.1.0和更新的版本克服了这个限制

这意味着
strotime()
最多只能在1901年12月13日之前工作,最差只能在1970年1月1日之前工作。幸运的是,PHP提供了一个解决方案。您可以使用
strotime()
功能之外的日期:

$date1 = new DateTime('1776-08-08');
$date2 = new DateTime('1968-12-07');
$interval = $date1->diff($date2);
echo $interval->format('%a days'); // 70247

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

您应该使用
DateTime
类而不是
strotime
函数

注意:
DateTime
类将工作
=5.2.0

$ref = new DateTime("1776-08-08");
$date = new DateTime("1968-12-07");

$diff = $ref->diff($date);

echo $diff->format('%a');
或用于完整对象

print_r($diff)

无法使用文档中1970年1月1日00:00:00 UTC ATES之前的STROTIME:…并非所有平台都支持负时间戳,因此您的日期范围可能被限制为不早于Unix纪元。这意味着,例如1970年1月1日之前的日期将不适用于Windows、某些Linux发行版和一些其他操作系统。PHP5.1.0和更新版本克服了这个限制。谢谢,这非常有帮助!再说一次,这是如何解决问题的?把它变成一个答案。这只是一个信息,现在应该是一个评论,而不是一个答案。现在,如果他们没有PHP5.2+,该怎么办?