373

如何从 eg 获取时间戳22-09-2008

4

19 回答 19

637


此方法适用于Windows和 Unix ,并且可以识别时区,如果您使用dates ,这可能是您想要的。

如果您不关心时区,或者想使用服务器使用的时区:

$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


无论如何,在将字符串解析为结构化数据时,严格要求始终是一个很好的起点。以后可以省去麻烦的调试。因此,我建议始终指定日期格式。

于 2008-09-22T08:45:20.917 回答
188

还有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);
于 2008-09-22T08:52:45.220 回答
130

使用DateTimeAPI

$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');

请注意,如果您不设置!,则时间部分将设置为当前时间,这与前四个不同,在您省略时间时将使用午夜。

另一种选择是使用IntlDateFormatterAPI:

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

除非您使用本地化的日期字符串,否则更简单的选择可能是 DateTime。

于 2011-05-17T09:01:48.537 回答
116

小心strtotime()那些试图“猜测”你的意思的函数(它当然不会猜测,规则就在这里)。

Indeed22-09-2008将被解析为22 September 2008,因为这是唯一合理的事情。

将如何08-09-2008解析?可能是 2008 年 8 月 9 日

怎么样2008-09-50?某些版本的 PHP 将其解析为20 October 2008

所以,如果你确定你的输入是DD-MM-YYYY格式的,最好使用@Armin Ronacher提供的解决方案。

于 2008-09-22T16:22:12.317 回答
63


此方法适用于Windows和 Unix ,并且可以识别时区,如果您使用dates ,这可能是您想要的。

如果您不关心时区,或者想使用服务器使用的时区:

$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


无论如何,在将字符串解析为结构化数据时,严格要求始终是一个很好的起点。以后可以省去麻烦的调试。因此,我建议始终指定日期格式。

于 2013-10-11T14:21:01.677 回答
44

使用mktime

list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
于 2008-09-22T08:44:11.870 回答
20

使用 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/

于 2015-04-06T22:24:06.273 回答
14

split这是一个使用andmtime函数的非常简单有效的解决方案:

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

它对我来说就像一个魅力。

于 2010-09-08T16:07:16.023 回答
6

如果您知道格式使用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)
于 2010-01-07T13:26:02.897 回答
6

如果您想确定日期是否被解析为您期望的内容,您可以使用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可能是 4 月 3 日或 3 月 4 日,具体取决于您来自哪里:)

于 2012-12-13T03:32:14.403 回答
6

鉴于该函数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']);
于 2012-06-11T10:36:49.937 回答
6

使用 PHP 函数strtotime()

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

date - 格式化本地时间/日期

于 2018-02-09T10:03:23.047 回答
4
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>

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

于 2013-11-15T00:26:56.390 回答
4
$time = '22-09-2008';
echo strtotime($time);
于 2014-07-31T07:31:27.740 回答
3

这是我的做法:

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

这样,您可以让函数知道您使用的日期格式,甚至指定时区。

于 2010-06-13T13:00:04.043 回答
3
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
于 2012-02-11T11:26:19.933 回答
3
<?php echo date('U') ?>

如果需要,将其放入MySQL输入类型时间戳中。以上效果很好(仅在 PHP 5 或更高版本中):

<?php $timestamp_for_mysql = date('c') ?>
于 2012-12-13T03:20:41.777 回答
0

如果您将其设置为在数据库中保存日期,请注意时间/区域,因为当我比较从 mysql 转换为timestampusing的日期时遇到问题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)
于 2016-05-19T11:50:06.780 回答
-4

如果您希望将 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);
于 2016-02-27T15:52:38.757 回答