2014-01-21 131 views
0

我有一些處理日期和時間的代碼。我認爲這是可以的,但是想要測試它在DST時鐘前進時的工作情況。PHP模擬日光節約

我可以使用date_default_timezone_set('Europe/London');更改時區,並想知道是否有一個容易模擬DST而不必等到時鐘改變!

+0

「無需等到時鐘更改」手動更改系統時間如何? – marekful

+0

我懷疑有改變你的系統時鐘的替代方案。你在測試什麼操作系統? – ToBe

+0

可以在Windows以外的任何地方進行測試。也許你對系統時間是正確的,這聽起來很明智,因爲我想檢查從數據挖掘者到數據庫的所有內容,所以system = sensible。 –

回答

2

你沒有提供細節上要測試什麼,但我假設你有功能做的時間相關的東西,如:

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); 
0

你肯定能找到,用戶是否在夏令時區或夏令時目前正在生效。

echo date('I', time()); 

這將返回0/1;

0 =夏令時不生效。 1 =夏令時生效。

更多細節:http://php.net/manual/en/function.date.php

在此基礎上可以進行有條件的代碼來模擬你的輸出。