PHP解析日期字符串

时间:2009-08-14 17:20:27

标签: php date parsing

如果我有日期字符串:

$date = "08/20/2009";

我想分开日期的每一部分:

$m = "08";
$d = "20";
$y = "2009";

我该怎么做?

我应该使用特殊日期功能吗?或其他什么?

谢谢!

8 个答案:

答案 0 :(得分:18)

一种方法是:

$time = strtotime($date);
$m = date('m', $time);
$d = date('d', $time);
$y = date('Y', $time);

答案 1 :(得分:14)

explode可以解决这个问题:

$pieces = explode("/", $date);
$d = $pieces[1];
$m = $pieces[0];
$y = $pieces[2];

或者,您可以在一行中完成(请参阅评论 - 谢谢Lucky):

list($m, $d, $y) = explode("/", $date);

答案 2 :(得分:6)

查看PHP的date_parse function。除非您确定输入将始终采用一致的格式,并且您首先对其进行验证,但它更稳定,更灵活(更不用说更容易了),让PHP尝试为您解析格式。

e.g。

<?php
//Both inputs should return the same Month-Day-Year
print_r(date_parse("2012-1-12 51:00:00.5"));
print_r(date_parse("1/12/2012"));
?>

答案 3 :(得分:3)

如果您有给定的格式,则应使用date对象。

$date = DateTime::createFromFormat('m/d/Y', '08/20/2009');
$m = $date->format('m');
$d = $date->format('d');
$y = $date->format('Y');

请注意,您当然只能拨打DateTime::format()一次。

$newFormat = $date->format('d-m-Y');

答案 4 :(得分:2)

总是这样吗?或者它是否有任何文件格式?

尝试使用strtotime。

类似的东西:

if(($iTime = strtotime($strDate))!==false)
{
 echo date('m', $iTime);
 echo date('d', $iTime);
 echo date('y', $iTime);
}

答案 5 :(得分:1)

怎么样:

list($m, $d, $y) = explode("/", $date);

快速单线。

答案 6 :(得分:0)

对于国际化日期解析,请参阅IntlDateFormatter :: parse - http://php.net/manual/en/intldateformatter.parse.php

例如:

$f = new \IntlDateFormatter('en_gb', \IntlDateFormatter::SHORT, \IntlDateFormatter::NONE);
$dt = new \DateTime();
$dt->setTimestamp($f->parse('1/2/2015'));

答案 7 :(得分:-3)

Dominic的答案很好,但是 IF 日期始终的格式与您使用的格式相同:

$m = substr($date,0,2);
$d = substr($date,3,2);
$y = substr($date,-4);

而不必使用数组或爆炸

Bill H