Как получить метку времени из, например, 22-09-2008
?
PHP's strtototime()
дает
$timestamp = strtotime('22-09-2008');
Что работает с Supported Date and Time Formats Docs.
Существует также 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);
$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');
Если вы работаете с локализованной строки даты, тем легче выбор, скорее всего, Датавремя.
Будьте осторожны с функциями, как, использования функции strtotime ()
, что стараться "Думаю" что вы имеете в виду (это вовсе'т думаю, конечно, правила здесь).
Действительно 22-09-2008
будет проанализирован как 22 сентября 2008, так как это единственная разумная вещь.
Как 08-09-2008
быть разобрано? Наверное 09 Августа 2008 Года.
Насчет 2008-09-50
? Некоторые версии PHP парсить это как 20 октября 2008.
Поэтому, если вы не уверены, что ваш вклад в ДД-ММ-гггг
, это'ы лучше использовать решение, предложенное @Армин Ронахер.
<БР/>
Если у вас есть php 5.3 или выше,
этот метод работает на и Windows и Unix и по*часовой пояс* известно, что, вероятно, то, что вы хотите, если вы серьезно относитесь к работе с датами.
Если вы Don'т заботиться о timezone, или хотите использовать часовой пояс на компьютере используется:
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
echo $d->getTimestamp();
1222093324 <суб>(это будет отличаться в зависимости от часового пояса сервера...)</суб>
<БР/>
Если вы хотите указать, в каком часовом поясе, здесь есть. (Так же, как Нью-Йорк.)
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('EST'));
echo $d->getTimestamp();
1222093305
<БР/>
Или если вы хотите использовать UTC. (Так же, как "мск" по.)
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('UTC'));
echo $d->getTimestamp();
1222093289
<БР/>
С помощью использования функции 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/
Вот очень простое и эффективное решение с помощью раскол
и `время изменения функции:
$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);
Он работал как шарм для меня.
Учитывая, что функция strptime()не работает для использования функции 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']);
Если вы хотите знать наверняка, является ли дата получает проанализирован в то, что вы ожидаете, вы можете использовать тип 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
Это's очевидным в таком случае, но например 03-04-2008 может быть 3 апреля или 4 марта в зависимости от того, откуда вы :)
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>
$time = '22-09-2008';
echo strtotime($time);
Если вы знаете использовать формат strptime
потому что функции strtotime
не догадываюсь, что за формат, который может не всегда быть правильным. С strptime не реализованные в Windows есть пользовательская функция
Помните, что tm_year в returnvalue составляет от 1900! и tm_month является 0-11
Пример:
$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900)
Использования функции strtotime использовать PHP-функцию ()
echo strtotime('2019/06/06');
Вот как я'd сделать это:
function dateToTimestamp($date, $format, $timezone='Europe/Belgrade')
{
//returns an array containing day start and day end timestamps
$old_timezone=date_timezone_get();
date_default_timezone_set($timezone);
$date=strptime($date,$format);
$day_start=mktime(0,0,0,++$date['tm_mon'],++$date['tm_mday'],($date['tm_year']+1900));
$day_end=$day_start+(60*60*24);
date_default_timezone_set($old_timezone);
return array('day_start'=>$day_start, 'day_end'=>$day_end);
}
$timestamps=dateToTimestamp('15.02.1991.', '%d.%m.%Y.', 'Europe/London');
$day_start=$timestamps['day_start'];
Таким образом, Вы пусть функция знаю, что формат даты вы используете, и даже указать часовой пояс.
function date_to_stamp( $date, $slash_time = true, $timezone = 'Europe/London', $expression = "#^\d{2}([^\d]*)\d{2}([^\d]*)\d{4}$#is" ) {
$return = false;
$_timezone = date_default_timezone_get();
date_default_timezone_set( $timezone );
if( preg_match( $expression, $date, $matches ) )
$return = date( "Y-m-d " . ( $slash_time ? '00:00:00' : "h:i:s" ), strtotime( str_replace( array($matches[1], $matches[2]), '-', $date ) . ' ' . date("h:i:s") ) );
date_default_timezone_set( $_timezone );
return $return;
}
// expression may need changing in relation to timezone
echo date_to_stamp('19/03/1986', false) . '<br />';
echo date_to_stamp('19**03**1986', false) . '<br />';
echo date_to_stamp('19.03.1986') . '<br />';
echo date_to_stamp('19.03.1986', false, 'Asia/Aden') . '<br />';
echo date('Y-m-d h:i:s') . '<br />';
//1986-03-19 02:37:30
//1986-03-19 02:37:30
//1986-03-19 00:00:00
//1986-03-19 05:37:30
//2012-02-12 02:37:30
Пожалуйста, будьте осторожны о времени/зоны, если вы установите его, чтобы сохранить даты в базе, а у меня проблема, когда я сравнил даты из MySQL, который преобразуется в метку
с помощью использования функции strtotime`. необходимо использовать точно такое же время/зоны перед преобразованием даты в метку времени в противном случае, использования функции strtotime() будет использовать по умолчанию часовой пояс сервера.
Пожалуйста, см. В этом примере: https://3v4l.org/BRlmV
function getthistime($type, $modify = null) {
$now = new DateTime(null, new DateTimeZone('Asia/Baghdad'));
if($modify) {
$now->modify($modify);
}
if(!isset($type) || $type == 'datetime') {
return $now->format('Y-m-d H:i:s');
}
if($type == 'time') {
return $now->format('H:i:s');
}
if($type == 'timestamp') {
return $now->getTimestamp();
}
}
function timestampfromdate($date) {
return DateTime::createFromFormat('Y-m-d H:i:s', $date, new DateTimeZone('Asia/Baghdad'))->getTimestamp();
}
echo getthistime('timestamp')."--".
timestampfromdate(getthistime('datetime'))."--".
strtotime(getthistime('datetime'));
//getthistime('timestamp') == timestampfromdate(getthistime('datetime')) (true)
//getthistime('timestamp') == strtotime(getthistime('datetime')) (false)
Если вы'вновь хотите преобразовать мирового значения datetime (2016-02-14T12:24:48.321 з
) с временной меткой, здесь's, как вы'd сделать это:
function UTCToTimestamp($utc_datetime_str)
{
preg_match_all('/(.+?)T(.+?)\.(.*?)Z/i', $utc_datetime_str, $matches_arr);
$datetime_str = $matches_arr[1][0]." ".$matches_arr[2][0];
return strtotime($datetime_str);
}
$my_utc_datetime_str = '2016-02-14T12:24:48.321Z';
$my_timestamp_str = UTCToTimestamp($my_utc_datetime_str);