Как мне получить отметку времени на php на сегодня в полночь. Скажем, сегодня понедельник 17:00, и мне нужна метка времени понедельника (сегодня) в полночь (12 часов утра), что уже произошло.
Полночь - это не утро и не вечер. Также технически не существует метки времени для полуночи.
hakre
16
@hakre Я с тобой не согласен. Полночь - это утро, и в каком бы формате ни была метка времени, для полуночи есть значение.
G-Nugget,
1
если 00:00:00 считается сегодня или завтра. Сегодня полночь осталась позади нас - почти всегда - технически. Вы хотите 23:59:59 «сегодня вечером» или 00:00:00 «сегодняшняя полночь, то есть завтра», более или менее.
wesside
5
время 00:00:00 будет сегодняшней полуночью, поскольку сколько времени потребуется, чтобы добраться до 00:00:00, которое уже произошло. где, как 23:59:59, будет сегодня вечером. Если вы говорите с точки зрения сегодняшнего дня. Полночь AM.
Наска
4
00:00 - это полночь в начале дня, 24:00 - это полночь в конце дня. Однако для простоты большинство цифровых часов пропускают 24:00, объявляя полночь началом нового дня. Т.е. 8 февраля 24:00 и 9 февраля 00:00 на практике являются одним и тем же моментом времени.
@SamHuckaby: Это еще проще: $timestamp = strtotime('today');полночь. Но, пссст, тот, что выше, выглядит круче в качестве ответа на вопрос;)
hakre
Мне действительно нужно начать сегодня и в полночь сегодня. Как мне найти начало сегодняшнего дня, я имею в виду 00:00:00
Happy Coder
3
@AlwinAugustin: Вам следует подумать о том, чтобы изменить вашу формулировку. Полночь технически находится между двумя днями. Так что «сегодня больше нет». Также: Midgnight сегодня (по определению) - это (прямо перед) начало сегодняшнего дня. Вы, вероятно, имеете в виду следующую полночь после сегодняшнего полудня .
hakre
да, на самом деле мне нужно 00:00:00 сегодня и 23:59:59 сегодня
Happy Coder
2
Имейте в виду, что это приведет к полуночи часового пояса вашего PHP-сервера, а не UTC + 0 ! Чтобы получить UTC + 0, вы можете использовать strtotime('today+00:00').
mae
74
Я думаю, что вам следует использовать новый объект PHP DateTime, поскольку у него нет проблем с датами за пределами 32-битных ограничений, которые есть у strtotime (). Вот пример того, как получить сегодняшнюю дату в полночь.
$today =newDateTime();
$today->setTime(0,0);
Или, если вы используете PHP 5.4 или новее, вы можете сделать это следующим образом:
$today =(newDateTime())->setTime(0,0);
Затем вы можете использовать, echo $today->format('Y-m-d');чтобы получить формат, в котором вы хотите выводить ваш объект.
Я также предпочитаю использовать новый объект DateTime. Если вы объедините этот ответ с @ hakr, вы получите:, new DateTime('today midnight')что проясняет намерение (но это, конечно, дело вкуса).
Martijn
1
Я выполняю работу ORM SQL, и мне пришлось использовать объект DateTime для сравнения. Это именно то, что я искал. +1
NobleUplift
Может быть$today = new DateTime('today')
ProgZi
Также полезно, если вы используете Carbon, который наследуется от DateTime. Таким образом, вы также можете делать, new Carbon('today midnight')а затем использовать все углеродные вещи, например ->subDays(6). См. Carbon.nesbot.com
Кристофер К.
Относительно 32-битного ограничения: в PHP-документе для strtotime говорится : «Для 64-битных версий PHP допустимый диапазон временной метки фактически бесконечен, поскольку 64-битные могут представлять приблизительно 293 миллиарда лет в любом направлении». Так что это применимо только к 32-битному php.
Вы хотите рассчитать время последнего небесного события, когда солнце прошло прямо под вашими ногами, с поправкой на местные правила обозначения полудня, а также, возможно, с поправкой, чтобы у людей оставалось достаточно дневного света после возвращения с работы домой, а также для другие политические соображения.
Ужасно, правда? На самом деле это обычная проблема, но полный ответ зависит от местоположения:
$zone =new \DateTimeZone('America/New_York');// Or your own definition of “here”
$todayStart =new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();
Я использовал функцию даты PHP, чтобы получить сегодняшнюю дату без каких-либо ссылок на время, а затем передать ее функции «строка во время», которая преобразует дату и время в временную метку эпохи. Если он не успевает, он принимает первую секунду этого дня.
Есть ли конкретный формат, о котором просил OP? Если так, я был бы рад изменить свое сообщение, чтобы вернуть любой формат, который они хотели бы.
SamHuckaby
полностью игнорируемый strtotime(), ум был так сосредоточен на функции даты. Извиняюсь.
wesside
2
Более предметным способом:
$today =new \DateTimeImmutable('today');
пример:
echo (new \DateTimeImmutable('today'))->format('Y-m-d H:i:s');// will output: 2019-05-16 00:00:00
и:
echo (new \DateTimeImmutable())->format('Y-m-d H:i:s');
echo (new \DateTimeImmutable('now'))->format('Y-m-d H:i:s');// will output: 2019-05-16 14:00:35
$midnight = strtotime('midnight');действительно Вы также можете попробовать
strtotime('12am')или strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]'). Я пропустил добавление сегодня до полуночи, потому что по умолчанию сегодня.
Ответы:
Вы можете посмотреть, что может предложить PHP: http://php.net/datetime
источник
$timestamp = strtotime('today');
полночь. Но, пссст, тот, что выше, выглядит круче в качестве ответа на вопрос;)strtotime('today+00:00')
.Я думаю, что вам следует использовать новый объект PHP DateTime, поскольку у него нет проблем с датами за пределами 32-битных ограничений, которые есть у strtotime (). Вот пример того, как получить сегодняшнюю дату в полночь.
Или, если вы используете PHP 5.4 или новее, вы можете сделать это следующим образом:
Затем вы можете использовать,
echo $today->format('Y-m-d');
чтобы получить формат, в котором вы хотите выводить ваш объект.Объект PHP DateTime
источник
new DateTime('today midnight')
что проясняет намерение (но это, конечно, дело вкуса).$today = new DateTime('today')
new Carbon('today midnight')
а затем использовать все углеродные вещи, например->subDays(6)
. См. Carbon.nesbot.comСегодня в полночь. Легко.
источник
Вы хотите рассчитать время последнего небесного события, когда солнце прошло прямо под вашими ногами, с поправкой на местные правила обозначения полудня, а также, возможно, с поправкой, чтобы у людей оставалось достаточно дневного света после возвращения с работы домой, а также для другие политические соображения.
Ужасно, правда? На самом деле это обычная проблема, но полный ответ зависит от местоположения:
Возможные определения слова «здесь» перечислены на странице https://secure.php.net/manual/en/timezones.php.
источник
strtotime('America/New_York today midnight');
? - 3v4l.org/I85qDдолжен дать вам то, что вам нужно.
объяснение
Я использовал функцию даты PHP, чтобы получить сегодняшнюю дату без каких-либо ссылок на время, а затем передать ее функции «строка во время», которая преобразует дату и время в временную метку эпохи. Если он не успевает, он принимает первую секунду этого дня.
Ссылки: Функция даты: http://php.net/manual/en/function.date.php
Строка ко времени: http://us2.php.net/manual/en/function.strtotime.php
источник
strtotime()
, ум был так сосредоточен на функции даты. Извиняюсь.Более предметным способом:
пример:
и:
источник
такой же как
и это немного меньше работы на вашем сервере.
источник
$midnight = strtotime('midnight');
действительноВы также можете попробовать
strtotime('12am')
илиstrtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]')
. Я пропустил добавление сегодня до полуночи, потому что по умолчанию сегодня.источник
Если вы используете Carbon, вы можете сделать следующее. Вы также можете отформатировать эту дату, чтобы установить
Expire
заголовок HTTP.источник
Обновленный ответ от 19 апреля 2020 г.
Просто мы можем это сделать:
$today = date('Y-m-d 00:00:00');
источник
источник