PHP解析日期字符串

10

如果我有一个日期字符串:

$date = "08/20/2009";

我想要分离日期的每个部分:

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

我该如何做到呢?

是否有特定的日期函数可以使用?还是其他方法?

谢谢!

8个回答

18

一个方法是这样做:

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

1
啊,但是你的回复更加健壮。 - Doug Hays
4
由于时间戳的限制,strtotime并不总是有效。比如说你想解析第一次世界大战,你无法将28/08/1914转换为有效的时间戳。 - Emre Yazici

14

explode函数可以用来完成这个操作:

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

或者,您可以一行完成它(请参见注释-感谢Lucky):

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

5
е°Ҷж—Ҙжңҹеӯ—з¬ҰдёІдҪҝз”Ёж–ңжқ ("/")еҲҶеүІпјҢеҸ–еҫ—жңҲд»ҪгҖҒж—Ҙе’Ңе№ҙд»ҪпјҢеӯҳж”ҫеңЁ$mгҖҒ$dе’Ң$yеҸҳйҮҸдёӯгҖӮ - Lucky

5
请查看PHP的date_parse函数。除非您确定输入始终是一致的格式,并且首先对其进行验证,否则让PHP尝试解析格式会更加稳定和灵活(更不用说更容易了)。例如:
<?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"));
?>

4
如果你有给定的格式,应该使用一个 日期 对象。
$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');

2

这种情况总是这样吗?还是会以任何文件格式出现?

尝试使用strtotime函数。

例如:

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

2
这个怎么样:
list($m, $d, $y) = explode("/", $date);

一个简短的一行代码。

0

关于国际化日期解析,请参见IntlDateFormatter::parse - http://php.net/manual/zh/intldateformatter.parse.php

例如:

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

-3

Dominic的回答很好,但是如果日期始终以相同的格式出现,您可以使用以下方法:

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

而不必使用数组或分裂

Bill H


为什么要避免使用explode函数?如果日期始终以相同的格式出现,那么explode函数将完美地工作,并且正如@GiDo所暗示的那样,它在意图方面是自我记录的。如果想避免使用数组,则可以将元素列出到不同的变量中。 - Sepster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接