我如何从中获取时间戳22-09-2008
?
PHP strtotime()
给出了
$timestamp = strtotime('22-09-2008');
哪个适用于支持日期和时间格式文档.
还有一种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
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);
如果由于您使用的格式不受支持而导致上述操作失败,则可以使用
$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.
小心这样的功能strtotime()
试图"猜测"你的意思(它当然没有猜测,规则在这里).
确实22-09-2008
会被解析为2008年9月22日,因为这是唯一合理的事情.
怎么08-09-2008
解析?可能是2008年8月9日.
怎么样2008-09-50
?某些版本的PHP将其解析为2008年10月20日.
因此,如果您确定您的输入是DD-MM-YYYY
格式化的,那么最好使用@Armin Ronacher提供的解决方案.
如果你有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
使用mktime:
list($day, $month, $year) = explode('-', '22-09-2008'); echo mktime(0, 0, 0, $month, $day, $year);
使用strtotime()函数可以轻松地将日期转换为时间戳
更多信息:http://php.net/manual/en/function.strtotime.php
在线转换工具:http://freeonlinetools24.com/
这是一个使用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);
它对我来说就像一个魅力.
鉴于该功能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']);
如果您想确定日期是否被解析为您期望的内容,您可以使用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日,具体取决于你来自哪里:)
如果你知道格式使用,strptime
因为strtotime
猜测格式,这可能并不总是正确的.由于strptime
未在Windows中实现,因此存在自定义功能
http://nl3.php.net/manual/en/function.strptime.php#86572
请记住,返回值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)
http://php.net/manual/en/function.date.php
$time = '22-09-2008'; echo strtotime($time);