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

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

Ответы [ 19 ]

5 голосов
/ 07 января 2010

Если вы знаете формат, используйте strptime, потому что strtotime делает предположение о формате, который не всегда может быть правильным. Поскольку strptime не реализована в Windows, существует пользовательская функция

Помните, что возвращаемое значение tm_year от 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)
5 голосов
/ 31 июля 2014
$time = '22-09-2008';
echo strtotime($time);
5 голосов
/ 15 ноября 2013
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>

http://php.net/manual/en/function.date.php

4 голосов
/ 13 июня 2010

Вот как я это сделаю:

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'];

Таким образом, вы сообщаете функции, какой формат даты вы используете, и даже указываете часовой пояс.

4 голосов
/ 13 декабря 2012
<?php echo date('U') ?>

Если хотите, поместите его в MySQL метку времени типа ввода. Вышеописанное работает очень хорошо (только в PHP 5 или новее):

<?php $timestamp_for_mysql = date('c') ?>
4 голосов
/ 11 февраля 2012
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
1 голос
/ 19 мая 2016

Пожалуйста, будьте осторожны с часовым поясом, если вы устанавливаете его для сохранения дат в базе данных, поскольку у меня возникла проблема, когда я сравнивал даты из mysql, которые конвертировались в timestamp с использованием 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)
0 голосов
/ 09 февраля 2018

Использовать функцию PHP strtotime ()

echo strtotime ('2019/06/06');

дата - форматирование местного времени / даты

0 голосов
/ 27 февраля 2016

Если вы хотите преобразовать дату и время UTC (2016-02-14T12:24:48.321Z) в метку времени, вот как вы это сделаете:

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);
...