Как мне получить отметку времени на php на сегодня в полночь. Скажем, сегодня понедельник 17:00, и мне нужна метка времени понедельника (сегодня) в полночь (12 часов утра), что уже произошло.
Спасибо
Как мне получить отметку времени на php на сегодня в полночь. Скажем, сегодня понедельник 17:00, и мне нужна метка времени понедельника (сегодня) в полночь (12 часов утра), что уже произошло.
Спасибо
Ответы:
$timestamp = strtotime('today midnight');
Вы можете посмотреть, что может предложить PHP: http://php.net/datetime
$timestamp = strtotime('today');
полночь. Но, пссст, тот, что выше, выглядит круче в качестве ответа на вопрос;)
strtotime('today+00:00')
.
Я думаю, что вам следует использовать новый объект PHP DateTime, поскольку у него нет проблем с датами за пределами 32-битных ограничений, которые есть у strtotime (). Вот пример того, как получить сегодняшнюю дату в полночь.
$today = new DateTime();
$today->setTime(0,0);
Или, если вы используете PHP 5.4 или новее, вы можете сделать это следующим образом:
$today = (new DateTime())->setTime(0,0);
Затем вы можете использовать, echo $today->format('Y-m-d');
чтобы получить формат, в котором вы хотите выводить ваш объект.
new DateTime('today midnight')
что проясняет намерение (но это, конечно, дело вкуса).
$today = new DateTime('today')
new Carbon('today midnight')
а затем использовать все углеродные вещи, например ->subDays(6)
. См. Carbon.nesbot.com
Вы хотите рассчитать время последнего небесного события, когда солнце прошло прямо под вашими ногами, с поправкой на местные правила обозначения полудня, а также, возможно, с поправкой, чтобы у людей оставалось достаточно дневного света после возвращения с работы домой, а также для другие политические соображения.
Ужасно, правда? На самом деле это обычная проблема, но полный ответ зависит от местоположения:
$zone = new \DateTimeZone('America/New_York'); // Or your own definition of “here”
$todayStart = new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();
Возможные определения слова «здесь» перечислены на странице https://secure.php.net/manual/en/timezones.php.
strtotime('America/New_York today midnight');
? - 3v4l.org/I85qD
$today_at_midnight = strtotime(date("Ymd"));
должен дать вам то, что вам нужно.
объяснение
Я использовал функцию даты PHP, чтобы получить сегодняшнюю дату без каких-либо ссылок на время, а затем передать ее функции «строка во время», которая преобразует дату и время в временную метку эпохи. Если он не успевает, он принимает первую секунду этого дня.
Ссылки: Функция даты: http://php.net/manual/en/function.date.php
Строка ко времени: http://us2.php.net/manual/en/function.strtotime.php
strtotime()
, ум был так сосредоточен на функции даты. Извиняюсь.
Более предметным способом:
$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]')
. Я пропустил добавление сегодня до полуночи, потому что по умолчанию сегодня.
function getTodaysTimeStamp() {
const currentTimeStamp = Math.round(Date.now() / 1000);
const startOfDay = currentTimeStamp - (currentTimeStamp % 86400);
return { startOfDay, endOfDay: startOfDay + 86400 - 1 };
}
// starts from sunday
function getThisWeeksTimeStamp() {
const currentTimeStamp = Math.round(Date.now() / 1000);
const currentDay = new Date(currentTimeStamp * 1000);
const startOfWeek = currentTimeStamp - (currentDay.getDay() * 86400) - (currentTimeStamp % 86400);
return { startOfWeek, endOfWeek: startOfWeek + 7 * 86400 - 1 };
}
function getThisMonthsTimeStamp() {
const currentTimeStamp = Math.round(Date.now() / 1000);
const currentDay = new Date(currentTimeStamp * 1000);
const startOfMonth = currentTimeStamp - ((currentDay.getDate() - 1) * 86400) - (currentTimeStamp % 86400);
const currentMonth = currentDay.getMonth() + 1;
let daysInMonth = 0;
if (currentMonth === 2) daysInMonth = 28;
else if ([1, 3, 5, 7, 8, 10, 12].includes(currentMonth)) daysInMonth = 31;
else daysInMonth = 30;
return { startOfMonth, endOfMonth: startOfMonth + daysInMonth * 86400 - 1 };
}
console.log(getTodaysTimeStamp());
console.log(getThisWeeksTimeStamp());
console.log(getThisMonthsTimeStamp());