How to convert date to timestamp in PHP?
如何获取时间戳,例如:
PHP的
1 |
哪个适用于支持日期和时间格式文档。
还有
1 2 | $a = strptime('22-09-2008', '%d-%m-%Y'); $timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900); |
使用
1 2 3 4 5 6 7 | $dateTime = new DateTime('2008-09-22'); echo $dateTime->format('U'); // or $date = new DateTime('2008-09-22'); echo $date->getTimestamp(); |
与过程API相同:
1 2 3 4 5 6 7 | $date = date_create('2008-09-22'); echo date_format($date, 'U'); // or $date = date_create('2008-09-22'); echo date_timestamp_get($date); |
如果由于您使用的格式不受支持而导致上述操作失败,则可以使用
1 2 3 4 5 6 7 | $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'); |
请注意,如果未设置
另一种方法是使用
1 2 3 4 5 6 7 8 9 | $formatter = new IntlDateFormatter( 'en_US', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'GMT', IntlDateFormatter::GREGORIAN, 'dd-MM-yyyy' ); echo $formatter->parse('22-09-2008'); |
除非您使用本地化日期字符串,否则更容易的选择可能是DateTime。
小心像
确实
如何解析
因此,如果您确定输入的格式为
如果你有PHP 5.3或以上,
这种方法适用于Windows和Unix,并且具有时区感知功能,如果您认真考虑使用日期,这可能就是您想要的。
如果您不关心时区,或者想要使用服务器使用的时区:
1 2 | $d = DateTime::createFromFormat('d-m-Y', '22-09-2008'); echo $d->getTimestamp(); |
1222093324 (这将根据您的服务器时区而有所不同......) sub>
如果要指定在哪个时区,这里是EST。 (与纽约相同。)
1 2 | $d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('EST')); echo $d->getTimestamp(); |
1222093305
或者如果您想使用UTC。 (与"GMT"相同。)
1 2 | $d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('UTC')); echo $d->getTimestamp(); |
1222093289
使用mktime:
1 2 |
使用strtotime()函数可以轻松地将日期转换为时间戳
1 2 3 4 5 6 7 8 9 10 | <?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/
这是一个使用
1 2 3 4 5 6 |
它对我来说就像一个魅力。
鉴于函数
1 2 | $date = date_parse_from_format('d-m-Y', '22-09-2008'); $timestamp = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']); |
如果您想确定日期是否被解析为您期望的内容,可以使用
1 2 3 4 5 6 | $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 |
在这种情况下很明显,但是
1 2 |
http://php.net/manual/en/function.date.php
如果您知道格式使用
- http://nl3.php.net/manual/en/function.strptime.php#86572
请记住,返回值
例:
1 2 | $a = strptime('22-09-2008', '%d-%m-%Y'); $timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900) |
我是这样做的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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']; |
这样,您可以让函数知道您正在使用的日期格式,甚至可以指定时区。
1 |
如果需要,请将其放在MySQL输入类型的时间戳中。以上工作非常好(仅限PHP 5或更高版本):
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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 |
使用PHP函数
1 |
date - 格式化本地时间/日期
如果你将它设置为在数据库中保存日期,请注意时间/区域,因为当我使用
请参阅此示例:https://3v4l.org/BRlmV
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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) |
如果您要将UTC日期时间(
1 2 3 4 5 6 7 8 9 10 | 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); |