2016-06-08 104 views
1

this question的帮助下,我已经能够将日期字符串解析为DateTime对象,然后以所需的格式显示它。 DateTime构造函数在解析DateTime字符串时有很好的例外 - 它无法区分dd/mm/YYYYmm/dd/YYYY之间的区别。格式未知时创建PHP日期时间

如果我做到以下几点:

$dt = new DateTime("05/03/1900"); // 5th march 1900 
echo $dt->format('Y-m-d'); 

然后我得到以下输出:

1900-05-03 

但是,原来的日期是dd/mm/YYYY格式,所以我的输出是不正确 - 我现在有3rd May 1900

解析日期字符串时,有没有办法将DateTime设置为更喜欢dd/mm/YYYY而不是mm/dd/YYYY

编辑: 我打电话在这个类的构造函数date_default_timezone_set('Europe/London');,但这似乎并没有产生任何影响。也许这与DateTime类没有关系。

+2

对于时区:'日期时间:: createFromFormat( 'd/M/Y','05/03/1900' ,新DateTimeZone(“欧洲/伦敦)) ;' – vaso123

+1

DateTime对象与'strtotime()' 如果您使用'/'作为分隔符,并且使用'-'作为分隔符,则假定日期为美国格式。 – RiggsFolly

+0

如果格式未知,那么你不能可靠地解析它。怎么说你的日期是dd/mm/yyyy或者mm/dd/yyyy? '/'暗示这是一种美国格式,但没有说它必须是。那要么是3月5日,要么是5月3日。你不能说。 –

回答

5

可以使用DateTime::createFromFormat

$dt = DateTime::createFromFormat('d/m/Y', '05/03/1900'); 
echo $dt->format('Y-m-d'); 
+0

请添加时区。 – vaso123

+0

这实际上是我在使用'DateTime'构造函数之前的第一次尝试。然而,这似乎返回一个布尔值而不是'DateTime'对象,因为我然后得到错误:'致命错误:调用布尔型' –

+0

@BrianButterfield上的成员函数格式()如果你得到一个布尔值,它意味着功能失败。仔细检查您传递的格式,并确定它们的格式相同。 – Jrod