我有一些處理日期和時間的代碼。我認爲這是可以的,但是想要測試它在DST時鐘前進時的工作情況。PHP模擬日光節約
我可以使用date_default_timezone_set('Europe/London');
更改時區,並想知道是否有一個容易模擬DST而不必等到時鐘改變!
我有一些處理日期和時間的代碼。我認爲這是可以的,但是想要測試它在DST時鐘前進時的工作情況。PHP模擬日光節約
我可以使用date_default_timezone_set('Europe/London');
更改時區,並想知道是否有一個容易模擬DST而不必等到時鐘改變!
你沒有提供細節上要測試什麼,但我假設你有功能做的時間相關的東西,如:
function setExpiryTime(DateTime $start, $minutes){
}
明顯的測試是提供輸入參數,這將使你的代碼跨DST邊界。你可以在你喜歡的搜索引擎找到這些信息或運行一個簡單的PHP代碼片段:
<?php
$timezone = new DateTimeZone('Europe/London');
print_r($timezone->getTransitions(mktime(0, 0, 0, 1, 1, date('Y')), mktime(0, 0, 0, 12, 31, date('Y'))));
Array
(
[0] => Array
(
[ts] => 1388530800
[time] => 2013-12-31T23:00:00+0000
[offset] => 0
[isdst] =>
[abbr] => GMT
)
[1] => Array
(
[ts] => 1396141200
[time] => 2014-03-30T01:00:00+0000
[offset] => 3600
[isdst] => 1
[abbr] => BST
)
[2] => Array
(
[ts] => 1414285200
[time] => 2014-10-26T01:00:00+0000
[offset] => 0
[isdst] =>
[abbr] => GMT
)
)
因此,你可以測試:
setExpiryTime(new DateTime('2014-03-30T00:55:00+0000'), 10);
setExpiryTime(new DateTime('2014-10-26T00:55:00+0000'), 10);
你肯定能找到,用戶是否在夏令時區或夏令時目前正在生效。
echo date('I', time());
這將返回0/1;
0 =夏令時不生效。 1 =夏令時生效。
在此基礎上可以進行有條件的代碼來模擬你的輸出。
「無需等到時鐘更改」手動更改系統時間如何? – marekful
我懷疑有改變你的系統時鐘的替代方案。你在測試什麼操作系統? – ToBe
可以在Windows以外的任何地方進行測試。也許你對系統時間是正確的,這聽起來很明智,因爲我想檢查從數據挖掘者到數據庫的所有內容,所以system = sensible。 –