1

如果我使用该策略来比较此处显示的基于文本的日期:使用 JavaScript 比较两个日期

假设用户输入“03/02/2013”​​(带有“/”的格式将被尊重),我将其与“04/01/2013”​​进行比较。在欧洲日历中,第一个日期是 2 月 3 日,第二个日期是 1 月 1 日。但在美国日历中,第一个是 3 月 2 日,第二个是 4 月 1 日。对于欧洲标准,第一个日期大于第二个,但对于美国标准,第二个更大。

链接中的这种方法是否考虑了日期位置?如果我的电脑不采用欧洲版本,我还没有找到一种方法来测试这个,这就是我问的原因。

4

2 回答 2

1

不,那里的策略不会为您处理日期本地化。

Javascripts 内部日期对象确实考虑了本地化。但这仅取决于浏览器/机器区域设置,它不一定必须匹配用户日期格式,位于它前面

而且您无法区分 DD/MM/YYYY 和 MM/DD/YYYY 格式。例外情况:DD > 12 没有关于用户的更多信息。

您当然可以使用浏览器/机器或 IP 地址的本地化来获取位置或其他内容,并根据此信息处理格式,但这很容易导致错误的结果。

我宁愿确保Date对象构造正确。

例如,通过提供一个日期选择器,让用户分别选择年月和日,以避免由于格式而导致日期模糊。

因为您无法确定坐在 PC 前的用户正在使用什么格式。

例如:我是欧洲人,并且在 enUS 上有我的浏览器区域设置。

因此

然后你可以构造你的日期对象,new Date(YEAR,MONTH,Day) 例如 ->

var year1 = 2013; //Suppose those variables will be handle by some user input method
var year2 = 2013;

var month1 = 0; //January (Months are zero based in javascripts Date Object)
var month2 = 3; //April

var day1 = 3;
var day2 = 1


var date1 = new Date(year1,month1,day1);
var date2 = new Date(year2,month2,day2);

console.log(date2.getTime() > date1.getTime()); //true

并且完全避免这个问题

于 2013-01-22T13:11:48.147 回答
1

给定链接中的转换方法检查构造函数类型。如果您将数据作为字符串提供转换方法,它将使用标准日期构造函数实例化一个日期对象,该构造函数需要是符合 RFC 2822 的时间戳。

当然“03/02/2013”​​是一个有效且合规的时间戳。它总是会在 3 月 2 日返回。如果是欧洲格式,您将如何识别???

您可以编写一些使用“toLocaleDateString”方法的代码来进行比较。然后,您将知道您的应用程序当前是否在欧洲机器上查看。在你的例子中:

new Date("03/02/2013").toLocaleDateString()

将在欧洲返回“2.3.2013”

基本检查(仅当点存在时,才可以这样做):

new Date("03/02/2013").toLocaleDateString().split('.').length === 3

如果返回 true,您可能在欧洲机器上。

于 2013-01-22T13:16:29.143 回答