从一个新的 Date 对象开始,有没有办法只使用 Date 对象的内置方法来生成以下字符串表示形式——即不允许使用正则表达式和/或子字符串操作? "2013-02-01T00:00:00-05:00"
问问题
1807 次
2 回答
4
仅使用 Date 对象的内置方法
不可以。JavaScript 不会让您输出带有自定义时区值的 ISO 8601 字符串,.toISOSTring
始终使用Z
(UTC)。
您将需要使用各种 getter 方法并自己构造字符串。基于如何在 JavaScript 中输出 ISO 8601 格式的字符串?以及如何在 javascript 中将 ISOString 转换为本地 ISOString?:
function customISOstring(date, offset) {
var date = new Date(date), // copy instance
h = Math.floor(Math.abs(offset)/60),
m = Math.abs(offset) % 60;
date.setMinutes(date.getMinutes() - offset); // apply custom timezone
function pad(n) { return n < 10 ? '0' + n : n }
return date.getUTCFullYear() + '-' // return custom format
+ pad(date.getUTCMonth() + 1) + '-'
+ pad(date.getUTCDate()) + 'T'
+ pad(date.getUTCHours()) + ':'
+ pad(date.getUTCMinutes()) + ':'
+ pad(date.getUTCSeconds())
+ (offset==0 ? "Z" : (offset<0 ? "+" : "-") + pad(h) + ":" + pad(m));
}
于 2013-02-20T23:54:51.143 回答
2
它非常简单,尽管您需要一个辅助函数来避免重复:
var pad = function(n) {return n < 10 ? "0"+n : n;};
var output = date.getFullYear()+"-"+pad(date.getMonth()+1)+"-"+pad(date.getDate())
+"T"+pad(date.getHours())+":"+pad(date.getMinutes())+":"+pad(date.getSeconds())
+(date.getTimezoneOffset() > 0 ? "-" : "+")
+pad(Math.floor(date.getTimezoneOffset()/60))
+":"+pad(date.getTimezoneOffset()%60);
于 2013-02-20T23:47:01.530 回答