date — php time ‘off’ на 8 часов и 14 минут

У меня проблема времени / даты. Я пытаюсь сравнить текущую дату и время с датой / временем в начале дня (полночь).
Текущее время:

echo date('d M, Y H:i:s e')."<br>";

Это возвращается, как и ожидалось: «07 октября 2014 12:51:25 Америка / Los_Angeles»

Затем, чтобы получить время в полночь в начале сегодняшнего дня, у меня есть:

echo date('d M, Y H:i:s e',strtotime(date('D, d M, Y')))."<br>";

который возвращает это: «07 октября 2014 20:14:00 America / Los_Angeles»

10 (8 вечера) странно, так как UTC не должно быть 08:00, а не 20:00? а 14 минут?

Может ли кто-нибудь помочь мне понять, что происходит здесь? Что мне не хватает?

Большое спасибо

0

Решение

date('Y-m-d H:i:s') дает тебе ток время, а не полночь Попробуйте использовать следующий код:

echo date('d M, Y H:i:s e',strtotime(date('Y-m-d 00:00:00')))."<br>";

«00:00:00» установить время до полуночи.

И вы можете использовать этот простой вариант:

echo date('d M, Y 00:00:00 e')
1

Другие решения

Вы отправляете вводящую в заблуждение строку даты в strtotime функция.

Если вы попробуете это:

echo date('d M, Y H:i:s e').'<br>';
echo date('d M, Y H:i:s e',strtotime(date('Y-m-d H:i:s')))."<br>";

Вы получите последовательный результат как Y-m-d H:i:s это гораздо лучший формат для strtotime работать с.

От документы на strtotime:

Функция ожидает получить строку, содержащую формат даты на английском языке и попытается проанализировать этот формат в метку времени Unix (количество секунд с 1 января 1970 г. 00:00:00 UTC) относительно временной отметки, указанной в текущем времени, или текущего времени, если сейчас не указано.

а также

Чтобы избежать двусмысленности, лучше использовать даты ISO 8601 (ГГГГ-ММ-ДД) или DateTime :: createFromFormat (), когда это возможно.

Чтобы получить время, которое вы ищете в полночь (я бы не предложил такой подход):

echo date('d M, Y H:i:s e',strtotime(date('Y-m-d')))."<br>";

Вы можете легко вывести «вне времени» дату и вставить статический 00:00:00 непосредственно внутри функции даты:

echo date('d M, Y 00:00:00 e')."<br>";

Но мне нравится использовать DateTime объекты:

$midnight = new DateTime('today');
echo $midnight->format('d M, Y H:i:s e').'<br>';
// Output from sandbox is: 07 Oct, 2014 00:00:00 US/Pacific<br>

Приятно то, что вы можете легко сравнить их без каких-либо дополнительных манипуляций:

$now = new DateTime('now'); // 2014-10-07 12:34:56
$midnight = new DateTime('today'); // 2014-10-07 00:00:00

var_dump($now > $midnight); // true
var_dump($now < $midnight); // false
var_dump($now === $midnight); // false
var_dump($now !== $midnight); // true
1

По вопросам рекламы [email protected]