我有一个网站,用户可以在发送到服务器之前输入他们自己的日期。因此,在实际使用之前,我显然需要解析他们给我的内容,并将其转换为标准格式。所以我使用了PHP的strtotime()函数,它很容易接受输入。
但我也在网站上使用date.js,它的parse()函数也很好。在将其发送到服务器之前,我应该在用户输入上使用它吗?哪一个更好?
出于安全考虑,我会将strtotime()放在后端,但如果date.js更好,我会将其添加到客户端。
(为了澄清,我希望大多数日期格式都是美国的。但如果这种情况发生变化,任何可以简化这种过渡的事情都是首选。)
发布于 2012-02-03 05:38:53
只要您觉得strtotime()满足了您的需求,就没有理由在客户端对其进行更改。然而,strtotime()做了几个假设,你需要保持在顶部:
From the strtotime() documentation:
通过查看各个组件之间的分隔符,可以消除m/d/y或d-m-y格式中的
日期的歧义:如果分隔符是斜杠(/),则假定为美国的m/d/y;而如果分隔符是短划线(-)或点(.),则假定为欧洲的d-m-y格式。
如果您允许您的客户以他们选择的任何格式发送日期,上述情况可能会引起混淆。我刚刚在date.js中测试了日期5/1/12和5-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浏览器。
发布于 2013-08-17 21:40:35
两者都有。
您绝对需要在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()。
https://stackoverflow.com/questions/9120333
复制相似问题