doukan1258
2016-06-08 14:33
浏览 95
已采纳

格式未知时创建PHP DateTime

With the help of this question, I have been able to parse a date string into a DateTime object, then display it in the desired format. The DateTime constructor works well in deciphering DateTime strings with one (very understandable) exception - it cannot tell the difference between dd/mm/YYYY and mm/dd/YYYY.

If I do the following:

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

Then I get the following output:

1900-05-03

However, the original date is in dd/mm/YYYY format, so my output is incorrect - I now have the 3rd May 1900.

Is there a way to set DateTime to prefer dd/mm/YYYY over mm/dd/YYYY when parsing a date string?

Edit: I am calling date_default_timezone_set('Europe/London'); in the constructor of this class but this doesn't seem to have any effect. Perhaps this isn't linked to the DateTime class.

图片转代码服务由CSDN问答提供 功能建议

这个问题,我已经能够将日期字符串解析为 DateTime 对象,然后以所需的格式显示它。 DateTime 构造函数可以很好地解析 DateTime 字符串中的一个(非常容易理解)异常 - 它无法区分 dd / mm / YYYY mm / dd / YYYY

如果我执行以下操作:

  $ dt = new DateTime(  “1900年5月3日”);  // 5月5日1900 
echo $ dt->格式('Ym-d'); 
   
 
 

然后我得到以下输出: \ n

  1900-05-03 
   
 
 

但是,原始日期是 dd / mm / YYYY 格式,所以我的输出不正确 - 我现在有 1900年5月3日

有没有办法将 DateTime 设置为首选 解析日期字符串时, dd / mm / YYYY 超过 mm / dd / YYYY

编辑: 我在这个类的构造函数中调用 date_default_timezone_set('Europe / London'); ,但这似乎没有任何效果。 也许这与 DateTime 类没有关联。

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • doqp87012 2016-06-08 14:38
    已采纳

    You can use the DateTime::createFromFormat

    $dt = DateTime::createFromFormat( 'd/m/Y', '05/03/1900' );
    echo $dt->format( 'Y-m-d' );
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题