2016-10-14 3 views
0

Обычно в обычный день 1440 минут (60 мин/час * 24 часа). Тем не менее, из-за летнего времени может быть 1380 минут (60 мин/час * 23 часа) или 1500 минут (60 мин/час * 25 часов).Получение точного количества минут данной даты

Как найти точное количество минут в заданную дату, когда предоставляется объект DateTime php?

Например, 13 марта 2016 года DST начинается в США (и, таким образом, составляет 23 часа), а 6 ноября 2016 года DST заканчивается в США (и, следовательно, составляет 25-часовой день). 1 мая 2016 года - обычный, 24-часовой день. Я хотел бы иметь функцию, возвращающих бы следующее:

$lomg= new DateTime('November 6, 2016T07:23:11'); 
$short= new DateTime('March 13, 2016T19:17:53'); 
$regular = new DateTime('May 1, 2016T22:45:00'); 

getMinutes($short); // Returns 1380 
getMinutes($long); // Returns 1500 
getMinutes($regular); // Returns 1440 
+1

Ну остановить используя временные метки unix, если вы можете их избежать, потому что все они основаны на UTC; и начать использовать объекты DateTime, которые на самом деле осведомлены о часовом поясе –

+0

Возможно ли использовать DST, используя ** ** (bool) $ dateTimeObject-> format ('I') '**. –

+1

Временная метка unix не содержит данных о часовом поясе. Это UTC и не имеет настроек DST. Вы должны преобразовать время (например, с помощью классов DateTime() и DateTimeZone() в php) внутренне в правильный часовой пояс, и он автоматически настроится на DST и смещение временной зоны на основе даты. –

ответ

0

Следующая следует (в принципе) работы:

<?php 


$dt = new DateTime();  
$dt->setTimestamp(1457827200);  
$dt->modify("today"); //Set to 00:00:00 
$dt2 = clone $dt;  // Copy to new instance 
$dt2->modify("+1 day"); 

var_dump(($dt2->getTimestamp() - $dt->getTimestamp())/60); 

(полный отказ от ответственности, не проверял)

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