Javascript日期是休息日吗?

Javascript dates are a day off?

本问题已经有最佳答案,请猛点这里访问。

我试图在应用程序中使用一个简单的日期函数来传递一个格式为yyyy-mm-dd的日期,如2017-07-30并以07/30/2017的格式返回。

然而,当我尝试这个的时候,我提供了正确的日期,但是它输出的时间比我想要的要短一天。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function format(inputDate) {
    var date = new Date(inputDate);
    if (!isNaN(date.getTime())) {
        var day = date.getDate().toString();
        var month = (date.getMonth() + 1).toString();
        // Months use 0 index.

        return (month[1] ? month : '0' + month[0]) + '/' +
           (day[1] ? day : '0' + day[0]) + '/' +
           date.getFullYear();
    }
}

console.log(format('2017-07-30'));

这是一把小提琴:http://jsfiddle.net/49pptrj4/

有没有想过为什么这是错误的返回?

最终结果:

enter image description here


从这里开始

Given a date string of"March 7, 2014", [Date.]parse() assumes a local time zone, but given an ISO format such as"2014-03-07" it will assume a time zone of UTC.

您的日期字符串假定为0:00或午夜,日期以英国格林威治时区UTC指定。但是,您的浏览器会占用这段时间,并将其转换为您的本地时区,如果您在美洲,则比UTC晚几个小时,这会使结果落后一天。

以下代码适用于在本地时区中创建具有正确日期的日期。

1
2
utcDate = new Date("2017-07-30"); //Date object a day behind
new Date(utcDate.getTime() + utcDate.getTimezoneOffset() * 60000) //local Date

在这里,通过根据时区差异添加时间来创建本地日期。getTimezoneOffset()以分钟为单位返回,因此需要* 60000转换为毫秒。

这在UTC之前的地区可能不起作用;可能会提前一天。编辑:刚检查过,并且在UTC之前的区域中getTimezoneOffset()为负数,因此它将正确地减去时间。