strtotime()& date()将日期转换为与之前相同的格式时的奇怪行为

时间:2011-02-24 07:24:20

标签: php date strtotime

我必须将日期格式转换为mm-dd-yyyy我不知道它是动态的当前日期格式,所以如果我的动态日期格式已经在mm-dd-yyyy,那么{{1}函数返回下面outout     

date()

输出

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

http://codepad.org/AFZ6jel7

所以我必须检查日期是否已经在 01-01-1970 ?> ,然后不应用日期格式。 还有其他办法吗?可能会在这些函数中传递另一个参数或类似的东西。

感谢。

2 个答案:

答案 0 :(得分:7)

我强烈怀疑这是造成问题的原因:

  

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

(见strtotime documentation。)

你有破折号分隔符,因此它采用d-m-y格式,将其解析为13个月,从而有效地失败。

我可以想到的选项,而不是PHP开发人员:

  • 如果有一个函数允许您明确说明字符串的格式,请使用
  • 更改格式以使用斜杠
  • 更改格式以使用d-m-y而不是m-d-y

答案 1 :(得分:4)

替换 - 用/为m-d-Y会有所帮助。

echo date('m-d-Y',strtotime(str_replace('-', '/', $date)));