strtotime()和date()将日期转换为以前的格式时的怪异行为

问题描述 投票:4回答:2

我必须将日期格式转换为mm-dd-yyyy,但我不知道它是动态的当前日期格式,所以如果我已经在mm-dd-yyyy中使用了动态日期格式,那么date()函数将在outout下面返回

    $date='02-13-2011';
    echo date('m-d-Y',strtotime($date));

输出是

  01-01-1970

?>

http://codepad.org/AFZ6jel7

所以我必须检查日期是否已经在mm-dd-yyyy中,所以不要应用日期格式。还有其他方法吗?可能正在这些函数中传递另一个参数或类似的东西。

谢谢。

php date strtotime
2个回答
8
投票

我强烈怀疑这是引起问题的原因:

m / d / y或d-m-y格式的日期通过查看各个组成部分之间的分隔符来消除歧义:如果分隔符是斜杠(/),则假定为美国m / d / y;相反,如果分隔符是破折号(-)或点(。),则采用欧洲d-m-y格式。

(在strtotime documentation中找到。]

您具有破折号分隔符,因此它假定为d-m-y格式,将其解析为13个月,因此实际上失败了。

我可以不用PHP开发人员就能想到的选项:

  • 如果有一个函数可以让您明确说明字符串的格式,请使用该格式。

    例如DateTime::createFromFormat()

  • 更改格式以使用斜杠
  • 将格式更改为使用d-m-y而不是m-d-y

4
投票

用-代替m-d-Y会有所帮助。

DateTime::createFromFormat()
© www.soinside.com 2019 - 2024. All rights reserved.