2014-01-21 4 views
0

У меня есть код, который обрабатывает даты и время. Я думаю, что все в порядке, но вы хотите проверить, что он работает, когда часы идут вперед для DST.PHP имитирует дневную экономию света

Я могу изменить часовой пояс, используя date_default_timezone_set('Europe/London');, и задавался вопросом, легко ли имитировать бытие в DST без необходимости ждать, пока часы не изменятся!

+0

«без необходимости ждать, пока часы меняются». Как насчет изменения системного времени вручную? – marekful

+0

Я сомневаюсь, что есть альтернатива изменению системных часов. На какой ОС вы тестируете? – ToBe

+0

Может протестировать что угодно, кроме Windows. Возможно, вы правы в отношении системного времени, что звучит разумно, так как я хочу проверить все, начиная с datapicker и заканчивая базой данных, так что система = разумная. –

ответ

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

На основании этого результата можно сделать условный код для имитации вашего вывода.

Смежные вопросы