Convert yyyy-MM-ddTHH:mm:ss.fffZ to DateTime in JavaScript manually

前端 未结 4 968
没有蜡笔的小新
没有蜡笔的小新 2021-01-02 09:47

I receive from a Webservice a String with a date in this format:

yyyy-MM-ddTHH:mm:ss.fffZ

I need to convert that String with JavaScript to

4条回答
  •  忘掉有多难
    2021-01-02 10:32

    If you know it will be of this form (ISO 8601, wiki), you can parse with RegExp or string methods. Here is a RegExp example that lets you use timezone Z, +hh or +hh:mm.

    var dateString = '2013-01-08T17:16:36.000Z';
    
    var ISO_8601_re = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{3}))?(Z|[\+-]\d{2}(?::\d{2})?)$/,
        m = dateString .match(ISO_8601_re);
    
    var year = +m[1],
        month = +m[2],
        dayOfMonth = +m[3],
        hour = +m[4],
        minute = +m[5],
        second = +m[6],
        ms = +m[7], // +'' === 0
        timezone = m[8];
    
    if (timezone === 'Z') timezone = 0;
    else timezone = timezone.split(':'), timezone = +(timezone[0][0]+'1') * (60*(+timezone[0].slice(1)) + (+timezone[1] || 0));
    // timezone is now minutes
    
    // your prefered way to construct
    var myDate = new Date();
    myDate.setUTCFullYear(year);
    myDate.setUTCMonth(month - 1);
    myDate.setUTCDate(dayOfMonth);
    myDate.setUTCHours(hour);
    myDate.setUTCMinutes(minute + timezone); // timezone offset set here, after hours
    myDate.setUTCSeconds(second);
    myDate.setUTCMilliseconds(ms);
    
    console.log(myDate); // Tue Jan 08 2013 17:16:36 GMT+0000 (GMT Standard Time)
    

提交回复
热议问题