-1

我知道 php strtotime() 函数并不是所有日期时间格式的答案。然而,我在下面描述的这种行为是非常危险的,因为它会让你相信它实际上正在工作,而实际上它实际上并没有:

用户告诉我她正在从下拉菜单中输入日期格式。我以字符串形式获取该日期,然后在其上运行 strtotime()。通常这很有效,但这里有一些陷阱:

//year 1999      
$timedate = "1999"; //string from the form marked as datetime
$utime = strtotime($timedate);  //Unixtime format
// Now check the results .. they are correct
echo "Raw TimeDate = $timedate. After calling strtotime() it is ".$utime." UnixTimeStamp or ". date( "Y-m-d : H:i:s", $utime)."<br/>";

//year 2000
$timedate = "2000";
$utime = strtotime($timedate);  //WRONG ANSWER!!!!
echo "Raw TimeDate = $timedate. After calling strtotime() it is ".$utime." UnixTimeStamp or ". date("Y-m-d : H:i:s",$utime)."<br/>";

当给 strtotime 的数字不明确时,就会发生这种情况。strtotime() 倾向于将其仅解析为 TIME(如 20 小时和 00 分钟)而不是 DATE 年 2000,这与它对字符串“1999”所做的相反这里没有问题,这只是一个注意事项

4

1 回答 1

1

这就是为什么最好使用PHP - DateTime

例如:

//year 2000
$timedate = "2000";
$date = date_create_from_format('Y', $timedate);
echo "Raw TimeDate = $timedate. After calling strtotime() it is ".$utime." UnixTimeStamp or ". date("Y-m-d : H:i:s",$date->getTimestamp())."<br/>";

输出

原始 TimeDate = 2000。调用 strtotime() 后,它是 930251446 UnixTimeStamp 或 2000-06-24 : 19:10:46

于 2013-06-24T19:12:27.003 回答