【问题标题】:Javascript date validation based on client date format基于客户端日期格式的 Javascript 日期验证
【发布时间】:2013-11-23 12:35:34
【问题描述】:

只是为了提供一些关于我正在尝试做的事情的背景:

  • 我在美国的美国机器上
  • 我正在使用 chrome
  • 我将控制面板中的机器设置 -> 区域和语言更改为“英语(英国)”
  • 在 Chrome -> 设置 -> 语言和输入设置下,我删除了“英语(美国)”并添加了“英语(英国)”

我有一个带有一个输入框的 html 页面,我想验证输入框中的文本是否是基于用户客户端区域设置的有效日期。所以美国用户可以输入“11/20/2013”​​,英国用户可以输入“20/11/2013”​​。

<input type="text" id="dt" />
<input type="button" id="validate" value="validate" />

<script>
$(document).ready(function() {
    $('#validate').click( function() {
        if (isNaN(Date.parse($('#dt').val())) == true)
            alert('date is invalid!');
        else
            alert('valid date');
    });
});
</script>

See jsFiddle example

似乎 Date.parse() 总是期待美国格式 (DD/MM/YYYY)。知道如何根据客户端语言环境进行验证吗?

【问题讨论】:

  • 我认为这个答案会对你有所帮助:stackoverflow.com/a/2587398/693275
  • 你应该告诉用户日期应该是什么格式,因为有很多变化,你将有相当大的任务来尝试验证所有的日期变化,这会让用户感到困惑它不起作用,他们也无法轻易找到日期格式。
  • adeneo 我明白你在说什么,但我不想强迫用户输入来自不同地区的格式。为什么英国用户要输入美国格式,美国用户为什么要输入英国格式?
  • 我自己是很多网站的用户,我并不关心日期或月份是否在前,只要我知道日期应该采用什么格式。如果我必须猜猜日期格式,直到我猜对了,我可能会离开并找到另一个网站,有数十亿个。

标签: javascript jquery date


【解决方案1】:

我不相信用户会在系统或浏览器中拥有正确的区域设置。我也不相信浏览器会正确地尊重这些设置。有时它会起作用,有时它不会。日期解析是高度特定于实现的。

相反,请考虑使用 moment.js 之类的库。在您的应用程序的某个地方,您可以询问用户他们的语言和区域设置。然后,您可以使用它来了解如何正确解析本地日期。

例如:

moment.lang("en-us");
console.log(moment("01/02/2013","L").format("LL"));  // "January 2 2013"

moment.lang("en-gb");
console.log(moment("01/02/2013","L").format("LL"));  // "1 February 2013"

无论如何,您可能最好在字段附近的某个地方向用户显示他们的格式,和/或使用日期选择器控件。

【讨论】:

  • 这让我非常接近我想去的地方。我现在唯一的问题是,为什么 JavaScript“toLocaleDateString()”中有一个函数,而不是解析日期的函数。
  • 确实new Date([string])构造函数或Date.parse([string])函数中具有相同的功能。问题是不同的网络浏览器实现它的方式都略有不同。 toLocalDateString() 也是如此,您会发现不同浏览器之间甚至同一浏览器的不同版本之间的输出存在很大差异。如果您不关心一致性,那么您可以使用这些。但大多数应用程序需要的远不止这些,这就是为什么存在像 moment.js 这样的库的原因。
  • 我非常感谢您的回复并试图帮助我解决这个问题。每当我尝试解析任何不是美国格式的日期时,无论我在 chrome 浏览器上进行什么设置,new Date([string]) 总是返回“无效日期”。我没有尝试任何其他浏览器,所以它可能只是一个 chrome 问题。我会试试 moment.js。
猜你喜欢
  • 2017-05-21
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多