如何格式化此日期字符串以便Google脚本识别它? [英] How do I format this date string so that google scripts recognizes it?

查看:80
本文介绍了如何格式化此日期字符串以便Google脚本识别它?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到一个json feed,格式如下:

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



我原本以为我可以将此日期传递到新日期中,因此

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

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



是否有最佳方式来重新格式化日期字符串,以便GAS可以将其识别为日期? 您发现无法解析ISO 8601格式的日期/时间。),并且您已经发现无法分析日期/时间(ISO 8601格式)。下面是我在一些我的Apps脚本中使用的一个修改后的函数

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

// http://delete.me.uk/2005/03/iso8601.html
函数getDateFromIso(字符串){
尝试{
var aDate =新日期();
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]);如果(d [12]){date.setMilliseconds(Number(0。+ d [12])* 1000);}
if }
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;
}
}


I'm getting a json feed with a date string formatted like the following:

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

I had thought I could just pass this into a new Date as such

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

This works on jsfiddle but not in google scripts. It's returning an invalid date. After reading this post I recognize it may be how GAS interprets the date string so now I'm not sure how to reformat the date to make it work.

Is there a best way to reformat that date string so GAS can recognize it as a date?

解决方案

Google Apps Script uses a particular version of JavaScript (ECMA-262 3rd Edition) and as you have discovered can't parse date/times in ISO 8601 format. Below is a modified function I use in a number of my Apps Scripts

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

这篇关于如何格式化此日期字符串以便Google脚本识别它?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆