如何获取时间戳,例如: 22-09-2008
?
答案 0 :(得分:577)
答案 1 :(得分:183)
还有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);
答案 2 :(得分:120)
使用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);
如果上述因您使用unsupported format而失败,则可以使用
$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。
答案 3 :(得分:114)
小心strtotime()
这样的功能,试图“猜测”你的意思(当然不会猜到rules are here)。
确实22-09-2008
将被解析为 2008年9月22日,因为这是唯一合理的事情。
如何解析08-09-2008
?可能 2008年8月9日。
2008-09-50
怎么样?某些版本的PHP将其解析为 2008年10月20日。
因此,如果您确定输入的格式为DD-MM-YYYY
,则最好使用@Armin Ronacher提供的解决方案。
答案 4 :(得分:48)
如果你有PHP 5.3或以上,
此方法适用于 Windows和Unix 时区,这可能就是您想要的非常认真地使用日期。
如果您不关心时区,或想要使用服务器使用的时区:
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
echo $d->getTimestamp();
1222093324 (根据您的服务器时区而有所不同......)
如果要指定在哪个时区,这里是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 强>
答案 5 :(得分:44)
使用mktime:
list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
答案 6 :(得分:17)
使用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);
?>
答案 7 :(得分:13)
使用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);
它对我来说就像一个魅力。
答案 8 :(得分:7)
鉴于功能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']);
答案 9 :(得分: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日,具体取决于你来自哪里:)
答案 10 :(得分:5)
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>
答案 11 :(得分:5)
$time = '22-09-2008';
echo strtotime($time);
答案 12 :(得分:5)
如果您知道格式使用strptime
,因为strtotime
会对格式进行猜测,这可能并不总是正确的。由于在Windows中未实现strptime
,因此存在自定义函数
请记住,返回值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)
答案 13 :(得分:4)
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
答案 14 :(得分:4)
<?php echo date('U') ?>
如果需要,请将其放在MySQL输入类型时间戳中。以上工作非常好(仅限PHP 5或更高版本):
<?php $timestamp_for_mysql = date('c') ?>
答案 15 :(得分:4)
我是这样做的:
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'];
这样,您可以让函数知道您正在使用的日期格式,甚至可以指定时区。
答案 16 :(得分:1)
如果将其设置为在数据库中保存日期,请注意时间/区域,因为当我使用timestamp
比较转换为strtotime
的mysql的日期时出现问题。在将日期转换为时间戳之前必须使用完全相同的时间/区域,否则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)
答案 17 :(得分:-1)
答案 18 :(得分:-2)
如果您希望将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);