我正在尝试在我的应用程序中使用简单的日期函数来传递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/
有关为何错误返回的任何想法?
我的结果:
答案 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之前的区域为负,因此它会正确减去时间。