Як би я пішов про отримання часової позначки в php сьогодні о півночі. Скажіть, що в понеділок 5:00, і я хочу, щоб мітка в понеділок (сьогодні) була опівночі (12 ранку), що вже відбулося.
Дякую
Як би я пішов про отримання часової позначки в php сьогодні о півночі. Скажіть, що в понеділок 5:00, і я хочу, щоб мітка в понеділок (сьогодні) була опівночі (12 ранку), що вже відбулося.
Дякую
Відповіді:
$timestamp = strtotime('today midnight');
Ви можете поглянути, що PHP може запропонувати: http://php.net/datetime
$timestamp = strtotime('today');
півночі. Але pssst, зазначений вище, виглядає крутіше як відповідь на питання;)
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());