2017-06-22 91 views
2

我正在查看一个半旧的代码库,其中使用以下代码根据用户的区域设置格式YYYY-MM-DD格式的日期:根据Firefox中的区域设置格式化“YYYY-MM-DD”日期字符串

new Date('2000-01-01').toLocaleDateString(navigator.language) 

然而,这并不工作在Firefox,因为new Date('2000-01-01')返回datetime(时间00:00)在UTC而toLocaleDateString使用用户的本地时区,因此上述将返回"December 31, 1999"在美国的用户。

跨浏览器做这件事的理智,安全的方式是什么?是否有可能没有一个或多个额外的依赖?

+0

你期望看到什么?这只是格式化的问题 – FieryCat

+0

可能是https://stackoverflow.com/questions/439630/how-do-you-create-a-javascript-date-object -with-a-set-timezone-without-using-as –

+0

我希望看到类似于“2000年1月1日”的内容。 – beta

回答

1

如果添加时间戳到日期字符串似乎与在本地时区那个时候被初始化:

new Date('2000-01-01T00:00:00'); 

我在Chrome和Firefox的尝试这样做,它似乎要工作。但是,应该避免使用字符串创建日期,因为不能保证它在不同浏览器中保持一致。这是更好地打破了日成及其零部件,分析它的数值和初始化的日期这样:

var dateParts = '2000-01-01'.split('-').map(Number); 
new Date(
    dateParts[0], 
    dateParts[1] - 1, // month is base 0 
    dateParts[2] 
); 

更新:原来的Safari假设UTC即使附加一个时间戳的日期字符串,所以这是解析它并用数值初始化日期的另一个理由,因为它总是使用本地时区。

+0

@beta是的,但是如果你运行'.toLocaleDateString()'?这不是输出重要的地方吗? –

+0

是的。对不起,删除评论。立即意识到我错了。 – beta