PHP strtotime不正确的转换

时间:2011-05-02 21:13:23

标签: php strtotime

我查看了手册,这可能是一种转换怪异但我无法弄明白。我从用户那里得到一个日期并尝试在PHP(版本4.1)中验证它(使用strtotime并检查返回值)。用户将以欧洲格式(d-m-y)输入日期,但是当我将此格式日期提供给strtotime时,它会不一致,例如:

03-01-2011转换为2008年7月3日

我知道手册中说连字符或点分隔日期被解释为欧洲语,但它在这里不起作用。

$startDate=$_GET['start'];
echo $startDate;
$timestamp=strtotime($startDate);
echo $timestamp;
echo date("d-M-Y",$timestamp);

第一个回声的输出是03-01-2011(这是正确的 - 用户输入值),第二个回声将时间戳显示为1215039600,日期回声显示03-Jul-2008

2 个答案:

答案 0 :(得分:3)

strtotime是神奇的,但并非绝对可靠。如果您想保证正确的转换,您应该使用

$dt = DateTime::CreateFromFormat('d-m-Y', $startDate);

允许您为输入指定显式格式,因此没有歧义。

不幸的是,这只是PHP 5.3+,你坚持4.1。即使strfptime()工作方式相似,也仅在5.1

我强烈建议您更新PHP版本,因为4.x已弃用且不受支持。

话虽如此,我无法看到任何一种转换歧义会如何将2011年转换为2008年。时区差异和日/月奇怪会摒弃数小时和数月,但不会改变事情3年。

答案 1 :(得分:1)

默认情况下,PHP期望和number-number-number是Y-m-d并从那里向后工作,直到日期有意义。您可能需要更改区域设置:http://ca.php.net/manual/en/class.locale.php。这应该可以解决欧洲日期格式错误,但请记住,现在反过来会出现问题。