比较日期时的位置

时间:2013-01-22 13:01:38

标签: javascript

如果我使用此策略来比较此处显示的基于文本的日期:Compare two dates with JavaScript

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

此方法是否来自链接帐户的日期位置?我没有找到一种方法来测试这个没有我的电脑采用欧洲版本,这就是我问的原因。

2 个答案:

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

完全避免这个问题

答案 1 :(得分:1)

给定链接中的convert-method检查构造函数类型。如果您将convert-method作为字符串提供给数据,它将使用标准日期构造函数实例化Date-Object,该构造函数需要符合RFC 2822时间戳。

当然“03/02/2013”​​是有效且合规的时间戳。它将永远返回3月2日。你怎么会认识到欧洲格式是否意味着???

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

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

将在欧洲返回“2.3.2013”​​

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

新日期(“03/02/2013”​​)。toLocaleDateString()。split('。')。length === 3

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