如何格式化此日期字符串以便Google脚本识别它?

jra*_*rad 12 google-apps-script

我正在获取一个json feed,其日期字符串的格式如下:

// 2012-08-03T23:00:26-05:00

我以为我可以把它传递到一个新的日期

var dt = new Date("2012-08-03T23:00:26-05:00");
Run Code Online (Sandbox Code Playgroud)

这适用于jsfiddle,但不适用于谷歌脚本.它返回一个无效的日期.阅读这篇文章后,我认识到可能是GAS如何解释日期字符串所以现在我不知道如何重新格式化日期以使其工作.

有没有最好的方法来重新格式化该日期字符串,以便GAS可以将其识别为日期?

mha*_*sey 20

Google Apps脚本使用特定版本的JavaScript(ECMA-262 3rd Edition),因为您发现无法解析ISO 8601格式的日期/时间.下面是我在许多应用程序脚本中使用的修改过的函数

var dt = new Date(getDateFromIso("2012-08-03T23:00:26-05:00"));

// http://delete.me.uk/2005/03/iso8601.html
function getDateFromIso(string) {
  try{
    var aDate = new Date();
    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
        "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\\.([0-9]+))?)?" +
        "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
    var d = string.match(new RegExp(regexp));

    var offset = 0;
    var date = new Date(d[1], 0, 1);

    if (d[3]) { date.setMonth(d[3] - 1); }
    if (d[5]) { date.setDate(d[5]); }
    if (d[7]) { date.setHours(d[7]); }
    if (d[8]) { date.setMinutes(d[8]); }
    if (d[10]) { date.setSeconds(d[10]); }
    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
    if (d[14]) {
      offset = (Number(d[16]) * 60) + Number(d[17]);
      offset *= ((d[15] == '-') ? 1 : -1);
    }

    offset -= date.getTimezoneOffset();
    time = (Number(date) + (offset * 60 * 1000));
    return aDate.setTime(Number(time));
  } catch(e){
    return;
  }
}
Run Code Online (Sandbox Code Playgroud)


Ser*_*sas 8

找到这个其他可能的非常简单的代码,似乎也可以完成这项工作:

function test(){
  Logger.log(isoToDate("2013-06-15T14:25:58Z"));
  Logger.log(isoToDate("2012-08-03T23:00:26-05:00"));
  Logger.log(isoToDate("2012-08-03T23:00:26+05:00"));
}

function isoToDate(dateStr){// argument = date string iso format
  var str = dateStr.replace(/-/,'/').replace(/-/,'/').replace(/T/,' ').replace(/\+/,' \+').replace(/Z/,' +00');
  return new Date(str);
}
Run Code Online (Sandbox Code Playgroud)