PHP strtotime()与date.js解析()

时间:2012-02-02 21:32:50

标签: php javascript datejs

我有一个网站,用户可以在发送到服务器之前输入他们自己的日期。因此,我显然需要解析他们给我的内容,并在实际使用之前将其转换为标准格式。所以我使用了PHP的strtotime()函数,它非常宽容它将接受的输入。

但我也在网站上使用date.js,它的parse()函数也很不错。在将用户输入发送到服务器之前,我应该在用户输入上使用它吗?哪一个更好?

为了安全起见,我会在后端保留strtotime(),但如果date.js更好,我会将其添加到客户端。

(澄清一下,我期待的主要是美国日期格式。但如果这种情况发生变化,那么任何能够缓解这种过渡的东西都是首选。)

2 个答案:

答案 0 :(得分:2)

只要您认为strtotime()满足您的需求,就没有理由在客户端进行更改。但是,strtotime()会做出一些假设,您需要保持最佳状态:

From the strtotime() documentation:

  

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

如果您允许您的客户以他们选择的任何格式发送日期,则上述内容可能会引起混淆。我刚刚在date.js中测试了日期5/1/125-1-12,并且两者都被解析为2012年5月1日.PHP将这两个分别解释为2012年5月1日和2005年1月12日(!!)。

echo date("Y-M-n", strtotime("5/1/12"));
// 2012-May-5
echo date("Y-M-n", strtotime("5-1-12"));
// 2005-Jan-1 (whoops!)

但是,预先格式化日期具有输入日期有效的一些保险的明显好处。在后端保留strtotime()还可确保您不需要启用JavaScript的客户端来发送请求。您的PHP仍然可以作为Web服务等进行调用,而无需客户端成为Web浏览器。

答案 1 :(得分:0)

两个

您绝对需要在PHP中验证日期,因为您的一个或多个用户可能已禁用Javascript。

Javascript验证很好,因为您可以在输入控件中输入日期,在onblur处理程序中验证它,并将验证日期写回控件。因此,在用户键入出生日期2/5/01并离开控件后,日期将更改为2001年5月2日,并且用户不仅知道日期被正确解释,而且strtotime()也明确无误值。

从UX的角度来看,您还可以使用更好的验证反馈。 Javascript可以做到以下(这可能是众所周知的,但它需要一些搜索我找到它)。在页面中放置一个元素,例如

<div id="DobReply"></div>;

然后验证出生日期的功能可以

document.getElementById("DobReply").innerHTML = "Current age is "+age; 

其中年龄是根据输入的出生日期和今天的日期计算的变量。一旦用户离开控件,计算出的年龄就会弹出,如果用户输入了当前年份(它发生了),那么她可能会立即发现错误。

所以我也不会摆脱datejs验证。但是,如果禁用Javascript,您可以获得无效日期,奇怪格式的日期或任何内容,所有这些都将丢失。因此,如果您只能拥有一个,请保留strtotime()