2017-07-31 74 views
2

我正在尝试在我的应用程序中使用简单的日期函数来传递格式为yyyy-mm-dd的日期,例如2017-07-30,并使其返回格式为07/30/2017JavaScript的日期是休息一天?

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

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

+0

结果在代码片段中看起来正确 – Dij

+0

您的jsfiddle /代码段正常工作 – Bdloul

+0

当我尝试打印'2017-07-30'时: - ? –

回答

2

here

鉴于 “2014年3月7日”,解析()的日期字符串假定本地时区,但给定一个ISO格式,例如“2014-03-07”它将假定UTC的时区。

您的日期字符串被假定为0:00,或半夜,在日期UTC,英国格林威治的时区指定。然而,您的浏览器需要这段时间,并将其转换为您当地的时区,如果您在美洲,这比UTC的时间晚了几个小时,从而使结果落后一天。

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

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

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

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

+0

这个问题已经回答了很多很多次之前。 – RobG

相关问题