close

同事希望我判斷她下的查詢條件是否是整整一個月,我本來以為用 date_diff 就可以算出來,但在兩台不同電腦上跑出不一樣的結果來。比較了兩台機器的差異,主要是時區 (Timezone) 不相同。

寫一小段程式來測試一下:

<?php
    function printDiff($tz) {
        $d1 = new DateTime("2017-02-01", new DateTimeZone($tz));
        $d2 = new DateTime("2017-03-01", new DateTimeZone($tz));
        $diff = $d1->diff($d2);
        print_r($d1);
        print_r($d2);
        print($diff->format("Year: %Y Month: %M Day: %D"). PHP_EOL. PHP_EOL);
    }
    printDiff("UTC");
    printDiff("Asia/Taipei");
?>

 

如果是 2017/02/01 和 2017/03/01 相比:

  • UTC: 兩者差 1 個月 0 天
  • Asia/Taipei: 兩者差 0 個月 28 天

PHP date_diff使用不同timezone的差異:以2017/02/01~2017/03/01為例

 

因為很好奇到底要到幾月幾日,台北時區才會判斷是足一個月,所以試了一下,發現要以 2017/02/01 與 2017/03/04 相比才會有這個結果:

  • UTC: 兩者差 1 個月 3 天
  • Asia/Taipei: 兩者差 1 個月 0 天

PHP date_diff使用不同timezone的差異:以2017/02/01~2017/03/04為例

 

我現在的做法是為了配合這部分,先在該支程式中把時區切回 UTC:

<?php
date_default_timezone_set('UTC');
?>
 

(不改系統全域變數,以免影響其他程式)

 

先記起來,等找到更好的方法再來更新。

arrow
arrow
    文章標籤
    date_diff
    全站熱搜

    小攻城師 發表在 痞客邦 留言(0) 人氣()