1

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

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

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

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

4

2 回答 2

2

只要您觉得strtotime()满足您的需求,就没有充分的理由在客户端进行更改。但是,strtotime()您需要做出几个假设:

strtotime()文档中:

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

如果您允许您的客户以他们选择的任何格式发送日期,上述内容可能会造成混淆。我刚刚在 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 浏览器。

于 2012-02-02T21:38:52.913 回答
0

两个都。

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

Javascript 验证很好,因为您可以在输入控件中输入日期,在onblur处理程序中对其进行验证,然后将验证后的日期写回控件。因此,在用户输入出生日期 2/5/01 并离开控件后,日期变为 2001 年 5 月 2 日,用户不仅知道日期解释正确,而且strtotime()还得到一个明确的值。

从用户体验的角度来看,您还可以使用更好的验证反馈。Javascript 可以执行以下操作(这可能是众所周知的,但我花了一些时间才找到它)。在页面中放置一个元素,例如

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

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

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

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

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

于 2013-08-17T13:40:35.273 回答