我的开始日期如下:
var startDate = "Mon Jun 30 2014 00:00:00 GMT-0400 (EDT)";
我正在尝试将其格式化为:
var endDate = "2014-06-30T00:00:00-04:00";
我已经使用toISOString()方法将其正确格式化为半格式:
var formattedDate = new Date(startDate);
formattedDate = formattedDate.toISOString();
将其格式化为“ 2014-06-30T04:00:00.000Z”。这接近我的需要,但我想知道是否有内置方法将其格式化为“ -04:00”格式?还是我需要将字符串分成几部分,然后以正确的格式将其补回来?
此外,我正在研究ES5的Google Apps脚本,并在可能的情况下尝试避免使用jQuery。
答案 0 :(得分:2)
Google Apps脚本(GAS)具有内置的实用程序方法,您可以利用该方法来格式化日期:
它基于Java的SimpleDateFormat
类。
要格式化日期以符合您的要求,就应该满足以下条件:
var date = new Date("Mon Jun 30 2014 00:00:00 GMT-0400 (EDT)");
var formattedDate = Utilities.formatDate(
date,
Session.getScriptTimeZone(),
"yyyy-MM-dd'T'HH:mm:ssXXX"
);
注意:您可能需要通过以下命令在GAS GUI菜单中设置脚本的时区:
File->Project Properties->Info
答案 1 :(得分:0)
我完全同意@JordanRunning的评论。
尽管如此,出于好奇,我还是迅速提出了一种获取所需格式的方法:
// two helper functions
function pad(number) {
if (number < 10) {
return '0' + number;
}
return number;
}
function getOffset(offset) {
if(offset<0) {
wminutes = 0 - offset;
var posneg = "-";
} else {
wminutes = offset;
var posneg = "+";
}
var hours = pad(Math.floor(wminutes/60));
var minutes = pad(wminutes % 60);
return posneg+hours+":"+minutes;
}
// the actual format function
Date.prototype.toMyFormat = function() {
var format = this.getUTCFullYear() +
'-' + pad(this.getMonth() + 1) +
'-' + pad(this.getDate()) +
'T' + pad(this.getHours()) +
':' + pad(this.getMinutes()) +
':' + pad(this.getSeconds());
timezoneOffset = getOffset(this.getTimezoneOffset());
format += timezoneOffset;
return format;
}
// usage:
console.log(new Date().toISOString());
// "2018-11-16T20:53:11.365Z"
console.log(new Date().toMyFormat());
// "2018-11-16T21:53:11-01:00"
答案 2 :(得分:0)
您可以重新格式化字符串。 OP中的格式与ECMAScript 2018中为Date.prototype.toString指定的格式一致,因此您甚至可以使用相同的功能重新格式化:
// Convert string in DDD MMM DD YYYY HH:mm:ss ZZ format to
// YYYY-MM-DDTHH:mm:ssZZ format
function formatDateString(s) {
var m = {Jan:'01',Feb:'02',Mar:'03',Apr:'04',May:'05',Jun:'06',
Jul:'07',Aug:'08',Sep:'09',Oct:'10',Nov:'11',Dec:'12'};
var b = s.split(' ');
return `${b[3]}-${m[b[1]]}-${b[2]}T${b[4]}${b[5].slice(-5,-2)}:${b[5].slice(-2)}`;
}
console.log(formatDateString("Mon Jun 30 2014 00:00:00 GMT-0400 (EDT)"));
// Not recommended, but it will format any date where its
// toString method is consistent with ECMAScript 2018
console.log(formatDateString(new Date().toString()));