PHP方法strtotime不能很好地产生结果


PHP method strtotime is not resulting well

function DateFormat($dt)
{
    return $newDate = date("d/m/Y", strtotime($dt));
}
$cr='2014-02-31';
echo DateFormat($cr);

Input: $cr='2014-02-31';
Output: 03/03/2014

我传递2014-02-31并得到输出03/03/2014

PHP的日期函数使用日期而不是字符串。这是一个重要的区别。字符串就是一串按特定顺序排列的字符。日期有月、日、年、时、分、秒、时区等。当PHP处理日期时,它会考虑所有的日期。

所以当你传递Feb 31给一个PHP日期函数时,它会尝试把它作为一个日期而不是字符串来理解。这意味着它不会把日期切成小块,然后按照你的期望重新排列。它将把那个日期转换成一个它可以处理的日期表示,然后对它进行操作。

我们都知道,二月有31天。由于无效日期,PHP试图提供帮助,并在该年2月的最后一天之后的第三天(因为今年2月只有28天)并给出该日期。

问题是大多数年份的二月只有28天。2/31可以逻辑地翻译成3/3。在闰年,你会得到3/4…

strtotime()方法,因为它需要非常灵活,能够处理的东西,而不像:

 strtotime('2014 February + 31 day - 1 year');

不,我不认为它应该出错。当您有一个格式良好的日期字符串时,PHP有一个名为checkdate()的方法,您可以使用:

   $crappy_date='2014-02-31';
   $date_parts =  explode('-', $crappy_date);
   $valid = checkdate($date_parts[1], $date_parts[2], $date_parts[0]);