使用javascript函数toLocaleDateString()的日期错误

时间:2017-01-02 20:20:03

标签: javascript string date locale

我在项目中使用Date类的javascript函数toLocaleDateString()来根据用户的语言环境获得正确的格式,这很简单。然而,这个月的日子并不总是正确的(比预期少一天)。我似乎无法理解为什么会这样。

我建立了一个jsfiddle来显示问题。它发生在10月份。日期应该像所有其他月份一样3,但不知何故它是2。

https://jsfiddle.net/vincepunkrock/nh1u3ord/

以下是代码和结果的重要部分(我的语言环境是'de'):

$(e.target).data('productNumber')
$(this).data('productNumber')

你们是否知道这里发生了什么,我该怎么做才能解决它?

非常感谢!

3 个答案:

答案 0 :(得分:3)

我认为Pointy用他的评论钉了它。 toLocalDateString绝对是DST的因子,假定小时为00:00:0000,因为它没有被指定所以"退回"小时进入前一天。我不确定你的语言环境只会在一个月内发生,但我不是专业的时区。该剧本适合我。

更新:设置"时间"如果这不是您想要的行为,那么在您的新日期到当天中午..然后夏令时调整不会在不同的日期来回反复..

var d = new Date(1993,i,3, 12,30,30,30);

答案 1 :(得分:0)

首先使用法语为我服务。您的浏览器的语言设置似乎会以奇怪的方式影响结果。 检查您的浏览器语言设置。

答案 2 :(得分:0)

在Firefox(60)上,从数字初始化日期时不会显示此信息(我的时区为GMT-3:观察Date初始化程序如何自动添加3小时):

>> var d;
>> d = new Date(2019,10,17);
Date 2019-11-17T03:00:00.000Z
>> console.log(d.toLocaleDateString('de'))
17.11.2019

但是,从字符串初始化它时,出现问题:

>> d = new Date("2019-10-17");
Date 2019-10-17T00:00:00.000Z
>> console.log(d.toLocaleDateString('de'))
16.11.2019

我发现可以解决问题的方法是手动将时区指定为UTC:

>> console.log(d.toLocaleDateString('de', {timeZone: "UTC"}))
17.10.2019