将日期时间字符串转换为javascript日期时出现问题

将日期时间字符串转换为javascript日期时出现问题,javascript,datetime,datetime-format,Javascript,Datetime,Datetime Format,我有一个字符串,其中包含日期时间为“20140121230000”。如果我想把它转换成日期 var oDate = new Date(20140121230000); 我把今年定为2068年!有没有办法将其转换为2014年01月21日23:00:00的日期 是否可以不在字符串中进行任何分析而直接转换此值?自1970年1月1日以来,您使用的构造函数需要毫秒,请尝试使用: var oDate = new Date(2014, 01, 21, 23, 00, 00, 00); 请注意,第01个月

我有一个字符串,其中包含日期时间为“20140121230000”。如果我想把它转换成日期

var oDate = new Date(20140121230000);
我把今年定为2068年!有没有办法将其转换为2014年01月21日23:00:00的日期


是否可以不在字符串中进行任何分析而直接转换此值?

自1970年1月1日以来,您使用的构造函数需要毫秒,请尝试使用:

 var oDate = new Date(2014, 01, 21, 23, 00, 00, 00);
请注意,第01个月将是2月,而不是1月,除非您使用a,否则无法在不手动拆分字符串的情况下转换值

var year   = +oDate.slice( 0, 4);
var month  = +oDate.slice( 4, 2) - 1; // Month is zero-based.
var day    = +oDate.slice( 6, 2); 

var hour   = +oDate.slice( 8, 2); 
var minute = +oDate.slice(10, 2); 
var second = +oDate.slice(12, 2);

// This will interpret the date as local time date.
var date = new Date(year, month, day, hour, minute, second);

// This will interpret the date as UTC date.
var utcDate = Date.UTC(year, month, day, hour, minute, second);

用字符串构造日期对象

new Date(string)
需要一个日期字符串,
date.parse
可以理解:

  • ISO 8601(例如
    2011-10-10T14:48:00
    ),或
  • RFC2822(例如,
    Mon,1995年12月25日13:30:00 GMT
有关和的更多信息,请参阅MDN

您的格式不可识别。你也可以

  • 重新格式化字符串以适合上述格式之一
  • 手动拆分字符串并使用单个参数调用
    Date
    ,如
    新日期(年、月、日、小时、分钟、秒、毫秒)
  • 使用像这样的库
  • 使用momente.js看起来像这样:

    moment("20140121230000", "YYYYDDMMHHmmss")
    

    有关格式语法的更多信息,请参见moment.js。

    给定
    '20140121230000'
    ,您可以将其拆分为位并将其交给日期构造函数:

    function parseSToDate(s) {
      var b = s.match(/\d\d/g) || [];
      return new Date( (b[0] + b[1]), --b[2], b[3], b[4], b[5], b[6]);
    }
    
    console.log(parseSToDate('20140121230000'));
    

    它就像一个符咒。但当我执行date.toJSON()时,它会输出“2013-12-30T18:30:00.000Z”。这里的小时和分钟似乎是错误的。小时必须是23,分钟必须是00。有什么想法吗?你在哪个时区?你选择的答案将值视为本地值,JSON返回UTC。该值也会在23天前移动。IST(印度标准时间)因此,如果您的本地时间为2014-01-01T00:00:00+0530,那么UTC等效值(由JSON使用)is 2013-12-31T18:30:00Z。使用
    Date.UTC
    如果日期不在本地时间-更新答案。请不要建议使用Date.parse。由于浏览器的差异,它不可靠,如果必须对字符串进行解析并重新格式化以适应某些实现的解析器,则还可以将其提供给日期构造函数,即r到处都是可信的。例如,Chrome和Firefox对ISO 8601的处理方式不同,如果在IE 8中进行解析,将导致NaN。我并不打算提倡使用
    Date.parse
    。我只是想解释海报方法失败的原因,以及调用
    Date时可以接受的格式
    带字符串。感谢您提供有关ISO 8601解析差异的指导!对于其他感兴趣的人,这是一个很好的概述: