代码之家  ›  专栏  ›  技术社区  ›  Robert Andrews

将具有完整月份名称和时间的日期转换为ISO日期

  •  0
  • Robert Andrews  · 技术社区  · 8 年前

    我有日期和时间戳的格式 02 December 2016 18:00pm

    这是由jquery选择器生成的:

    "datestamp": $('span.article_info__published').text(),
    

    我怎样才能把它转换成这种格式 2007-07-24T12:50:00+01:00 ?

    如果可能的话,我想在同一条线上做。否则它需要适应这种结构…

    result = {
        "other": $('div.article__header h1').text(),
        "datestamp": $('span.article_info__published').text(),
        "more": $('meta[name="twitter:image"]').attr("content"),
        "assorted": $('figcaption.caption').text(),
    };
    

    (我记不起目的地格式的名称…我认为是ISO 8601?)

    更新 :以下返回“无效日期”…

    var myDate = new Date("02 December 2016 18:00pm");
    
    document.write(myDate);
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   RobG    8 年前

    // Reformat string, using Date object for 
    // host timezone offset only
    function reformatDate(s) {
      function z(n){return ('0'+n).slice(-2)}
      var b = s.match(/\d+|[a-z]+/gi);
      var months = ['jan','feb','mar','apr','may','jun',
                    'jul','aug','sep','oct','nov','dec'];
      var monNum = months.indexOf(b[1].substr(0,3).toLowerCase());
      // Host timezone offset for given date and time
      var tzOffset = new Date(b[2], monNum - 1, b[0], b[3], b[4]).getTimezoneOffset();
      var tzSign = tzOffset > 0? '-' : '+';
      tzOffset = Math.abs(tzOffset);
      return b[2] + '-' +
             z(monNum) + '-' +
             b[0] + 'T' + 
             b[3] + ':' +
             b[4] + tzSign +
             z(tzOffset/60 | 0) + ':' +
             z(tzOffset%60);
    }
    
    // Reformat string using Date object for 
    // parts and host timezone offset
    function reformatDate2(s) {
      function z(n){return ('0'+n).slice(-2)}
      var b = s.match(/\d+|[a-z]+/gi);
      var months = ['jan','feb','mar','apr','may','jun',
                    'jul','aug','sep','oct','nov','dec'];
      var monNum = months.indexOf(b[1].substr(0,3).toLowerCase());
      var d = new Date(b[2], monNum - 1, b[0], b[3], b[4]);
      // Host timezone offset for given date and time
      var tzOffset = d.getTimezoneOffset();
      var tzSign = tzOffset > 0? '-' : '+';
      tzOffset = Math.abs(tzOffset);
      return d.getFullYear() + '-' +
             z(d.getMonth() + 1) + '-' +
             z(d.getDate()) + 'T' + 
             z(d.getHours()) + ':' +
             z(d.getMinutes()) + tzSign +
             z(tzOffset/60 | 0) + ':' +
             z(tzOffset%60);
    }
    
    var s = '02 December 2016 18:00pm';
    
    console.log(reformatDate(s));
    console.log(reformatDate2(s));

    moment.js fecha.js

    var s = '02 December 2016 18:00pm';
    // Create a Date
    var d = fecha.parse(s, 'DD MMMM YYYY HH:mm');
    // Format string
    console.log(fecha.format(d, 'YYYY-MM-DDTHH:mmZZ'));
    

    moment(s, 'DD MMMM YYYY HH:mm').format('YYYY-MM-DDTHH:mmZZ');
    
        2
  •  0
  •   Robert Andrews    8 年前

    var date = "02 December 2016 18:00pm"
    
    date = date.slice(0, -2);
    
    var myDate = new Date(date);
    
    document.write(myDate);