基于客户日期格式的Javascript日期验证

时间:2013-11-22 21:10:18

标签: javascript jquery date

只是为了说明我想要做的事情:

  • 我在美国的机器上在美国
  • 我正在使用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()总是期望US格式(DD / MM / YYYY)。知道如何根据客户端区域设置进行验证吗?

1 个答案:

答案 0 :(得分: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"

无论如何,您可能最好向用户显示他们在字段附近的格式,和/或使用datepicker控件。