Javascript日期是休息日吗?

时间:2017-07-31 03:29:23

标签: javascript date

我正在尝试在我的应用程序中使用简单的日期函数来传递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'));的格式返回。

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

scale

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

有关为何错误返回的任何想法?

我的结果:

enter image description here

1 个答案:

答案 0 :(得分:2)

来自here

  

给定日期字符串" 2014年3月7日",[日期。]解析()假设一个本地时区,但给定ISO格式,如" 2014-03-07&# 34;它将假定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

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

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