如何格式化此日期字符串以便Google脚本识别它? [英] How do I format this date string so that google scripts recognizes it?
问题描述
我得到一个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屋!