Javascript 日期是休息日吗?

SBB*_*SBB 4 javascript date

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

但是,当我尝试此操作时,我正确提供了我的日期,但它输出的日期比我要查找的日期短一天。

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'));
Run Code Online (Sandbox Code Playgroud)

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

关于为什么返回错误的任何想法?

我的结果:

在此处输入图片说明

Mat*_*ias 8

这里

给定日期字符串“2014 年 3 月 7 日”,[Date.]parse() 假定本地时区,但给定 ISO 格式(例如“2014-03-07”),它将假定时区为 UTC。

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

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

utcDate = new Date("2017-07-30"); //Date object a day behind
new Date(utcDate.getTime() + utcDate.getTimezoneOffset() * 60000) //local Date
Run Code Online (Sandbox Code Playgroud)

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

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