我如何格式化这个日期字符串,以便谷歌脚本识别呢?(How do I format this date

2019-06-26 18:41发布

我越来越与格式类似下面的日期字符串一个JSON提要:

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

我原以为我可以只通过进入一个新的日期作为本等

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

这部作品的jsfiddle但不是在谷歌的脚本。 它返回一个无效的日期。 看完这篇文章我承认它可能是GAS如何解释日期字符串,所以现在我不知道如何重新格式化日期,使其工作。

是否有重新格式化日期字符串,以便气体可以将其识别为日期的最佳方式?

Answer 1:

谷歌Apps脚本使用JavaScript(特定版本的ECMA-262第三版 ),当你发现无法解析日期ISO 8601格式/次。 下面是修改的功能我在我的一些Google Apps脚本的使用

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;
  }
}


Answer 2:

研究发现,似乎也做的工作这其他可能的和非常简单的代码:

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);
}


Answer 3:

硬和肯定拍的方式,使格式是否为预先知道它的工作是分析它。

var dtString = "2012-08-03T23:00:26-05:00";
var date = dtString.split('T')[0]; 
var time = dtString.split('T')[1].split('-')[0]; 
var tz = dtString.split('T')[1].split('-')[1]; 
var dt = new Date(date.split('-')[0] , date.split('-')[1] - 1,  // month is special
                  date.split('-')[2], time.split(':')[0],
                  time.split(':')[1], time.split(':')[2] , 0);

我没有测试过的代码,这个确切的一块,但都使用类似的代码。 所以,这给你如何进行一个公平的想法。



Answer 4:

这个工作对我来说, 在谷歌脚本日期字符串转换为日期对象时。

日期字符串是从在getValue()的方法中的谷歌表细胞吸收。

来源: 01.01.2017 22:43:34至: 2017/01/01 22:43:34做的工作。 然后new Date()

var dateTimeObj = new Date(stringDate.replace(/^(\d{1,2})[-.](\d{1,2})[-.](\d{4})/g,"$3/$2/$1"));


文章来源: How do I format this date string so that google scripts recognizes it?