如果我使用此策略来比较此处显示的基于文本的日期:Compare two dates with JavaScript。
假设用户输入“03/02/2013”(将遵循“/”格式)并将其与“04/01/2013”进行比较。在欧洲日历中,第一个日期是2月3日,第二个日期是1月1日。但在美国日历中,第一个是3月2日,第二个是4月1日。对于欧洲标准,第一个日期大于第二个日期,但对于美国标准,第二个日期更大。
此方法是否来自链接帐户的日期位置?我没有找到一种方法来测试这个没有我的电脑采用欧洲版本,这就是我问的原因。
答案 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,则可能是在欧洲机器上。