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 天
因為很好奇到底要到幾月幾日,台北時區才會判斷是足一個月,所以試了一下,發現要以 2017/02/01 與 2017/03/04 相比才會有這個結果:
- UTC: 兩者差 1 個月 3 天
- Asia/Taipei: 兩者差 1 個月 0 天
我現在的做法是為了配合這部分,先在該支程式中把時區切回 UTC:
<?php
date_default_timezone_set('UTC');
?>
(不改系統全域變數,以免影響其他程式)
先記起來,等找到更好的方法再來更新。
文章標籤
全站熱搜
留言列表