преобразование даты и времени в формат rfc3339 с использованием jquery или java-скрипта - PullRequest
0 голосов
/ 14 апреля 2011

Как преобразовать стандартный пример даты и времени: дд / мм / гггг: 12:00 в пример формата rfc3339 20100908T070000Z. Мне нужно экспортировать данные о времени и дате в календарь Google, календарь Yahoo, календарь Microsoft, ical.

1 Ответ

3 голосов
/ 14 апреля 2011

Ваше требование кажется немного тривиальным, есть что-то еще?Вот очевидный ответ:

function formatTimestring(s) {
  var b = s.split(/[\/:]/);
  return b[2] + b[1] + b[0] + 'T' + b[3] + b[4] + '00' + 'Z'
}

alert(
 formatTimestring('08/09/2010:12:00') //20100908T120000Z
);

Если вы хотите сгенерировать строку UTC в запрошенном формате из объекта даты или «сейчас», тогда:

/*
 *  Return a date string as yyyymmddThhmmssZ
 *  in UTC.
 *  Use supplied date object or, if no
 *  object supplied, return current time 
 */
var dateToUTCString = (function () {

  // Add leading zero to single digit numbers
  function addZ(n) {
    return (n<10)?'0'+n:''+n;
  }

  return function(d) {

    // If d not supplied, use current date
    var d = d || new Date();

    return d.getUTCFullYear() + 
           addZ(d.getUTCMonth() + 1) + 
           addZ(d.getUTCDate()) +
           'T' + 
           addZ(d.getUTCHours()) + 
           addZ(d.getUTCMinutes()) + 
           addZ(d.getUTCSeconds()) +
           'Z';
  }
}());

И если вы хотитеиспользовать мм-дд-гггг чч: мм [: ссам / пм]:

// input format: mm-dd-yyy hh:mm:ss[ ]am|pm
function timeStringToUTC(s) {

  // Deal with trailing am/pm if present
  // Probably should trim leading spaces here too
  var isPM = /pm\s*$/i.test(s);
  s = s.replace(/\s*pm\s*$/i,'')

  // Split the string on any of -, space or :
  var b = s.split(/[- :]/);

  // Add 12 to hour if is pm
  if (isPM) {
    b[3] = +b[3] + 12;
  } else {
    // Add leading zero if hours less than 10
    b[3] = (b[3] < 10)? '0' + +b[3] : b[3];
  }

  // Add leading zero to minutes if < 10
  if (b[4] < 10) b[4] = '0' + +b[4];

  // If seconds not supplied, set to 00
  if ( !/^\d\d?$/.test(b[5])) {
    b[5] = '00';
  } else {
    // Add leading zero if seconds less than 10
    if (b[5] < 10) b[5] = '0' + +b[5];
  }

  // Generate date object, call dateToUTCString to return 
  // UTC date string
  return dateToUTCString(
           new Date(b[2] + '/' +
                    b[0] + '/' +
                    b[1] + ' ' +
                    b[3] + ':' +
                    b[4] + ':' +
                    b[5]
               )
         ); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...