Как я могу получить временную метку, например 22-09-2008
?
350
Этот метод работает на обеих ОС Windows и Unix , и это время зона известно, что, вероятно , то , что вы хотите , если вы работаете с датами .
Если вас не интересует часовой пояс или вы хотите использовать часовой пояс, используемый вашим сервером:
$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093324 (Это зависит от часового пояса вашего сервера ...)
Если вы хотите указать, в каком часовом поясе, здесь EST. (То же, что в Нью-Йорке.)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('EST')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093305
Или, если вы хотите использовать UTC . (То же, что « GMT ».)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('UTC')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093289
Несмотря на это, всегда хорошая отправная точка для строгости при разборе строк в структурированных данных. Это может сохранить неловкую отладку в будущем. Поэтому я рекомендую всегда указывать формат даты.
Существует также strptime (), который ожидает ровно один формат:
источник
date_parse_from_format
вместоstrptime
.strptime
не реализовано на платформах Windows.С
DateTime
API :То же самое с процедурным API:
Если вышеперечисленное не помогает, потому что вы используете неподдерживаемый формат , вы можете использовать
Обратите внимание, что если вы не установите
!
, часть времени будет установлена на текущее время, которое отличается от первых четырех, которые будут использовать полночь, когда вы пропустите время.Еще одна альтернатива - использовать
IntlDateFormatter
API:Если вы не работаете с локализованными строками даты, более вероятным выбором будет DateTime.
источник
!
временная метка « Моя дата» менялась при каждом обновлении и сводила меня с ума - потому что DateTime старательно добавлял текущее время, не спрашивая и не сообщая. Хмм.Будьте осторожны с такими функциями
strtotime()
, попытайтесь «угадать», что вы имеете в виду (конечно, это не значит, что правила здесь ).Действительно
22-09-2008
будет разобран как 22 сентября 2008 года , так как это единственно разумная вещь.Как будет
08-09-2008
разбираться? Вероятно, 09 августа 2008 года .Как насчет
2008-09-50
? Некоторые версии PHP обрабатывают это как 20 октября 2008 года .Итак, если вы уверены, что ваш ввод в
DD-MM-YYYY
формате, лучше использовать решение, предлагаемое @Armin Ronacher .источник
dd-mm-yyyy
нетmm-dd-yyyy
.YYYY-mm-dd
. Конверсия происходит только для отображения пользователямЭтот метод работает на обеих ОС Windows и Unix , и это время зона известно, что, вероятно , то , что вы хотите , если вы работаете с датами .
Если вас не интересует часовой пояс или вы хотите использовать часовой пояс, используемый вашим сервером:
1222093324 (Это зависит от часового пояса вашего сервера ...)
Если вы хотите указать, в каком часовом поясе, здесь EST. (То же, что в Нью-Йорке.)
1222093305
Или, если вы хотите использовать UTC . (То же, что « GMT ».)
1222093289
Несмотря на это, всегда хорошая отправная точка для строгости при разборе строк в структурированных данных. Это может сохранить неловкую отладку в будущем. Поэтому я рекомендую всегда указывать формат даты.
источник
Использование mktime :
источник
strtotime()
какой-то причинеstrtotime()
не работает в определенные даты, и поэтому очень ненадежно.Используя функцию strtotime (), вы можете легко конвертировать дату в метку времени
Дополнительная информация: http://php.net/manual/en/function.strtotime.php
Инструмент онлайн-конвертации: http://freeonlinetools24.com/
источник
Вот очень простое и эффективное решение , используя
split
иmtime
функции:Это сработало как обаяние для меня.
источник
Учитывая, что эта функция
strptime()
не работает для Windows иstrtotime()
может возвращать неожиданные результаты, я рекомендую использоватьdate_parse_from_format()
:источник
Если вы хотите точно знать, разбирается ли дата во что-то, что вы ожидаете, вы можете использовать
DateTime::createFromFormat()
:Это очевидно в этом случае, но, например,
03-04-2008
может быть 3 апреля или 4 марта в зависимости от того, откуда вы пришли :)источник
DateTime::createFromFormat
возвращаетсяfalse
по ошибке , нетnull
.Если вы знаете формат использования
strptime
потому, что онstrtotime
делает предположение о формате, который не всегда может быть правильным. Посколькуstrptime
в Windows не реализовано, есть пользовательская функцияПомните, что возвращаемое значение
tm_year
с 1900 года! иtm_month
0-11Пример:
источник
http://php.net/manual/en/function.date.php
источник
источник
Используйте функцию PHP
strtotime()
date - форматировать местное время / дату
источник
источник
Если хотите, поместите его в метку времени ввода MySQL . Вышеописанное работает очень хорошо (только в PHP 5 или новее):
источник
Вот как я это сделаю:
Таким образом, вы сообщаете функции, какой формат даты вы используете, и даже указываете часовой пояс.
источник
Пожалуйста, будьте осторожны с часовым поясом, если вы установите его для сохранения дат в базе данных, так как у меня возникла проблема, когда я сравнивал даты из mysql, которые конвертировались в
timestamp
использованиеstrtotime
. Вы должны использовать точно такой же часовой пояс перед преобразованием даты в метку времени, иначе strtotime () будет использовать часовой пояс сервера по умолчанию.Пожалуйста, посмотрите этот пример: https://3v4l.org/BRlmV
источник
Если вы хотите преобразовать дату и время UTC (
2016-02-14T12:24:48.321Z
) в метку времени, вот как вы это сделаете:источник