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

时间:2017-12-13 09:18:07

标签: javascript date

我将Date字符串设置为从午夜开始的毫秒,如:

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

现在日期= 1513209600000;即,2017年12月14日星期四00:00:00 。这正是我想要从午夜或当天开始,即午夜开始约会的方式。

但是当我试图在Date对象中再次将此时间戳转换为时,它不会保留小时格式,例如:

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

我希望 dateObj 的日期和时间从午夜开始。任何人都可以在这里建议我到底做错了什么?提前谢谢。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

char*[]

答案 2 :(得分:0)

根据EMCA-262,ISO 8601格式的日期字符串(如“2017-12-14”)将由内置解析器解析为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,则可以:

  1. 自己解析字符串并将其设置为正确日期的当地午夜
  2. 将字符串解析为UTC并调整主机时区偏移量
  3. 案例1:

    function parseISOLocal(s) {
      var b = s.split(/\D/);
      return new Date(b[0], --b[1], b[2]);
    }
     
     var s = "2017-12-14";
     
     console.log(parseISOLocal(s).toString());
     

    案例2:

    var s = "2017-12-14";
    // Parsed as UTC
    var d = new Date(s);
    // Adjust for host timezone
    d.setUTCMinutes(d.getUTCMinutes() + d.getTimezoneOffset());
    // Show local date
    console.log(d.toString());