在Javascript中将毫秒转换为日期格式

在Javascript中将毫秒转换为日期格式,javascript,date,Javascript,Date,我将日期字符串设置为毫秒,从午夜开始,如下所示: var date = new Date("2017-12-14").setUTCHours(0,0,0,0) 现在日期=1513209600000;i、 e.,2017年12月14日星期四00:00:00。这正是我想从午夜或一天的开始,即午夜开始约会的方式 但是,当我尝试将此时间戳再次转换为日期对象时,它没有保留小时格式,如: var dateObj = new Date(date); // Thu Dec 14 2017 05:30:00 G

我将日期字符串设置为毫秒,从午夜开始,如下所示:

var date = new Date("2017-12-14").setUTCHours(0,0,0,0)
现在日期=1513209600000;i、 e.,2017年12月14日星期四00:00:00。这正是我想从午夜或一天的开始,即午夜开始约会的方式

但是,当我尝试将此时间戳再次转换为日期对象时,它没有保留小时格式,如:

var dateObj = new Date(date); // Thu Dec 14 2017 05:30:00 GMT+0530 (IST)

我希望这个dateObj有从午夜开始的日期和时间。谁能告诉我我到底做错了什么?提前感谢。

日期对象保留其值,您看到的是浏览器在本地时区中对该日期的表示。请尝试
dateObj.toutString()
读取原始值。

我认为使用时应将setUTCHours更改为setHours

var date = new Date("2017-12-14").setHours(0,0,0,0)

根据EMCA-262,类似“2017-12-14”的ISO 8601格式的日期字符串将由内置解析器解析为UTC(与ISO 8601相反),时间将设置为00:00:00 UTC,因此不需要将小时数归零

因此:

var date = new Date("2017-12-14").setUTCHours(0,0,0,0)
setUTCHours调用是多余的

由于您是+05:30,那么从当地午夜到05:30,UTC日期将是前一天

如果要将“2017-12-14”解析为时间设置为00:00:00的本地日期,则可以:

  • 自己解析字符串,并在正确的日期将其设置为本地午夜
  • 将字符串解析为UTC并调整主机时区偏移
  • 对于案例1:

    函数解析本地{
    var b=s.split(/\D/);
    返回新日期(b[0],--b[1],b[2]);
    }
    var s=“2017-12-14”;
    log(parseIsLocal.toString());
    
    您的时区有问题:请注意现在是GMT+5:30的5:30…
    setUTCHours
    返回1970年1月1日00:00:00 UTC和更新日期之间的毫秒数。您的毫秒值已经根据系统的时区偏移了
    5:30
    小时。@gurvinder372-“您的毫秒值已经偏移了…”不,不是,时间值始终是UTC,所以它不偏移。偏移的是toString返回的本地值(基于主机时区)。请注意,
    新日期(“2017-12-14”)
    将被解析为UTC,时间将由defualt设置为00:00:00UTC,无需将UTC小时归零。