日期函数的奇怪行为


Strange behavior of Date Function

我今天在StackOverflow上遇到了这个问题,但没有得到答案。

我的问题是

echo date('Y-m-d',strtotime('2012-september-09')); // output - 2012-09-01
echo date('Y-m-d',strtotime('09-september-2012')); // output - 2012-09-09

编码板

我很困惑为什么第一种格式不能产生正确的答案。有什么帮助吗?

来自手册:

如果分隔符是斜线(/),则假定为美国m/d/y;而如果分隔符是短划线(-)或点(.),则假定为欧洲d-m-y格式

这不是date函数的行为,而是strtotime函数的行为。strtotime只能处理"日期格式"手册页面上列出的特定格式的日期。09-september-2012采用此处列出的dd ([ 't.-])* m ([ 't.-])* y格式,但2012-september-09与任何支持的格式都不匹配。

我认为在您的代码中,

echo date('Y-m-d',strtotime('2012-september-09'));

strtotime('2012-september-09')不是strtotime()日期函数的有效格式('2012-september-09')

请参阅此链接http://www.php.net/manual/en/datetime.formats.date.php