Datetime比對(diff)天數因PHP版本而不同

php Datetime比對差異天數因php版本而不同,原因是因為時區設定

底下這段程式在不同php版本執行下有不同的結果。

<?php
$date1Str = '1988-04-18';
$date1 = new DateTime($date1Str,new DateTimeZone('PRC'));
$date2Str = '1900-01-31';
$date2 = new DateTime($date2Str,new DateTimeZone('PRC'));
echo "php version: ".phpversion();
echo "<br/>";
echo sprintf("%s與%s相差天數<br/>",$date1Str,$date2Str);
echo $date1->diff($date2)->days;

總的來說,php 5.6~php 7.2是一種結果,php 7.3~php 8.0是一種結果。

php 5.6~php 7.2的結果

php version: 5.6.40-63+ubuntu20.04.1+deb.sury.org+2
1988-04-18與1900-01-31相差天數
32219

php 7.3~php 8.0的結果

php version: 7.3.33-8+ubuntu20.04.1+deb.sury.org+1
1988-04-18與1900-01-31相差天數
32218

7.3之後的結果,1988-04-17和1988-04-18這兩天和1900-01-31都是差32218天,結果1988-04-19之後的相差天數就直接少一天,而實際上還有其他日期存在一樣的狀況,結果後續的日期就會差上更多天。

如果將Timezone從上面的PRC(中國標準時間)改成Asia/Taipei,各php版本的執行結果就會一樣是 32219,結果這個是bug?還是對PRC時區來講,出問題的日期有特殊意義?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Proudly using Dynamic Headers by Nicasio WordPress Design