计算边界值处的两个unix时间戳之间的日差

时间:2014-10-29 06:19:23

标签: php date datetime unix-timestamp datetime-format

我有两个时间戳创建日期02/09/2014 11:30 pm和03/09/2014 12:00 am。

这些时间戳之间只有30分钟的差异,但由于日期从10月10日更改为10月3日,因此应计算为一天。

我的代码是

$current_time_zone = isset($_COOKIE['IANA_timezone_key']) ? $_COOKIE['IANA_timezone_key'] : "";
$d1 = new DateTime(date('Y-m-d'), timezone_open($current_time_zone));
$d2 = new DateTime(date('Y-m-d'), timezone_open($current_time_zone));
$d1->setTimestamp($row["transitions_date"]); // $row["transitions_date"] has timestamp value
$d2->setTimestamp($curr_transition_in_date); // $curr_transition_in_date has timestamp value
$diff = date_diff($d1, $d2);
$day_difference = $diff->days;  

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

你不能指望date_diff()的返回对象与所需的日差,因为它基于实际的时差。最简单的方法是自己调整它。

$d1 = new DateTime(date('Y-m-d'));
$d2 = new DateTime(date('Y-m-d'));
$d1->setTimestamp($row["transitions_date"]);
$d2->setTimestamp($curr_transition_in_date);

$diff = date_diff($d1, $d2);
$day_difference = $diff->days;

echo 'Actual output from date_diff: '.$day_difference; 
echo '<br>';
if($d2->format('H:i:s') < $d1->format('H:i:s')){
    $day_difference++;
}
echo 'Corrected output: '.$day_difference;

Demo 1 表示不同的日期,但同一个月和一年 Demo 2 同一天,但月份和年份不同 Demo 3 表示相同的输出。