Я пытаюсь выполнить функцию, которая вернет true, если сейчас в настоящее время между определенными часами и днями недели.PHP Datetime Объект с более ранним временем datetime имеет более высокую временную метку?
Вещь, временные метки unix, похоже, не совпадают.
<?php
function isWorkingTime() {
$now = new DateTime(date('Y-m-d H:i:00'), new DateTimeZone(date('T')));
$tz = $now->getTimezone();
if(strtolower($tz->getName()) != 'est'){
$now->setTimezone(new DateTimeZone('EST'));
}
$min = clone $now;
$min->setTime(8,30,0);
$max = clone $now;
switch($now->format('N')){
case 1:
case 2:
case 3:
case 4:
$max->setTime(17,30,0);
break;
case 5:
$max->setTime(16,30,0);
break;
default:
return false;
break;
}
return ($now >= $min && $now < $max);
}
?>
Если я пойду дальше и пытаться выводить 3 объекта даты-времени, например, так:
<?php
echo 'now: '.$now->format('Y-m-d H:i:s U T').PHP_EOL;
echo 'min: '.$min->format('Y-m-d H:i:s U T').PHP_EOL;
echo 'max: '.$max->format('Y-m-d H:i:s U T').PHP_EOL;
?>
я получаю это:
now: 2017-02-15 13:17:00 1487164620 EST
min: 2017-02-15 08:30:00 1487165400 EST
max: 2017-02-15 17:30:00 1487197800 EST
Почему это $ мин метка времени больше, чем $ сейчас?
Я бегу PHP 5.6.30
Вы уверены в этом? Первая временная метка, указанная '1487164620',' 2017-02-15 13: 17: 00' - но в UTC Time. Итак, будет 07:30 в EST, что на самом деле меньше, чем 'min'. Я не могу воспроизвести это, ваш код работает должным образом. – dognose
@dognose Я воспроизвел его https://3v4l.org/YtC7u – Machavity
смешная вещь я не могу воспроизвести ее для php 5.6.30: https://3v4l.org/VDETE – pycvalade