Как преобразовать дату в метку времени в PHP? - PullRequest
322 голосов
/ 22 сентября 2008

Как мне получить временную метку, например, 22-09-2008

Ответы [ 19 ]

578 голосов
/ 22 сентября 2008

PHP strtotime() дает

$timestamp = strtotime('22-09-2008');

Что работает с Поддерживаемыми форматами даты и времени Документы .

183 голосов
/ 22 сентября 2008

Существует также strptime(), который ожидает ровно один формат:

$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);
120 голосов
/ 17 мая 2011

С DateTime API :

$dateTime = new DateTime('2008-09-22'); 
echo $dateTime->format('U'); 

// or 

$date = new DateTime('2008-09-22');
echo $date->getTimestamp();

То же самое с процедурным API:

$date = date_create('2008-09-22');
echo date_format($date, 'U');

// or

$date = date_create('2008-09-22');
echo date_timestamp_get($date);

Если вышеописанное не помогло, поскольку вы используете неподдерживаемый формат , вы можете использовать

$date = DateTime::createFromFormat('!d-m-Y', '22-09-2008');
echo $dateTime->format('U'); 

// or

$date = date_parse_from_format('!d-m-Y', '22-09-2008');
echo date_format($date, 'U');

Обратите внимание, что если вы не установите !, часть времени будет установлена ​​на текущее время, которое отличается от первых четырех, которые будут использовать полночь, когда вы пропустите время.

Еще одна альтернатива - использовать IntlDateFormatter API:

$formatter = new IntlDateFormatter(
    'en_US',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'GMT',
    IntlDateFormatter::GREGORIAN,
    'dd-MM-yyyy'
);
echo $formatter->parse('22-09-2008');

Если вы не работаете с локализованными строками даты, более вероятным выбором будет DateTime.

114 голосов
/ 22 сентября 2008

Будьте осторожны с такими функциями, как strtotime(), которые пытаются "угадать", что вы имеете в виду (конечно, это не значит, что правила здесь ).

Действительно 22-09-2008 будет проанализировано как 22 сентября 2008 , поскольку это единственно разумная вещь.

Как будет 08-09-2008 анализироваться? Вероятно 09 августа 2008 .

А как насчет 2008-09-50? Некоторые версии PHP разбирают это как 20 октября 2008 .

Итак, если вы уверены, что ваш ввод в формате DD-MM-YYYY, лучше использовать решение, предлагаемое @ Armin Ronacher .

48 голосов
/ 11 октября 2013

1001 *
*

Если у вас PHP 5.3 или выше,

этот метод работает на и Windows и Unix и * часовой пояс , что, вероятно, то, что вы хотите, если вы серьезно относитесь к работа с датами.

Если вас не интересует часовой пояс или вы хотите использовать часовой пояс, используемый вашим сервером:

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
echo $d->getTimestamp();

1222093324 (Это зависит от часового пояса вашего сервера ...)

1024 *
*

Если вы хотите указать, в каком часовом поясе, здесь EST. (То же, что в Нью-Йорке.)

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('EST'));
echo $d->getTimestamp();

1222093305


Или, если вы хотите использовать UTC. (То же, что «GMT».)

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('UTC'));
echo $d->getTimestamp();

1222093289


44 голосов
/ 22 сентября 2008

Использование mktime :

list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
17 голосов
/ 07 апреля 2015

Используя функцию strtotime (), вы можете легко конвертировать дату в метку времени

<?php
// set default timezone
date_default_timezone_set('America/Los_Angeles');

//define date and time
$date = date("d M Y H:i:s");

// output
echo strtotime($date);
?> 

Подробнее: http://php.net/manual/en/function.strtotime.php

Онлайн-конвертер: http://freeonlinetools24.com/

13 голосов
/ 08 сентября 2010

Вот очень простое и эффективное решение с использованием функций split и mtime:

$date="30/07/2010 13:24"; //Date example
list($day, $month, $year, $hour, $minute) = split('[/ :]', $date); 

//The variables should be arranged according to your date format and so the separators
$timestamp = mktime($hour, $minute, 0, $month, $day, $year);
echo date("r", $timestamp);

Это сработало для меня как шарм.

7 голосов
/ 11 июня 2012

Учитывая, что функция strptime() не работает для Windows и strtotime() может возвращать неожиданные результаты, я рекомендую использовать date_parse_from_format():

$date = date_parse_from_format('d-m-Y', '22-09-2008');
$timestamp = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']);
6 голосов
/ 13 декабря 2012

Если вы хотите точно знать, разбирается ли дата во что-то ожидаемое, вы можете использовать DateTime::createFromFormat():

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
if ($d === false) {
    die("Woah, that date doesn't look right!");
}
echo $d->format('Y-m-d'), PHP_EOL;
// prints 2008-09-22

Это очевидно в этом случае, но, например, 03-04-2008 может быть 3 апреля или 4 марта в зависимости от того, откуда вы приехали:)

...