ChatGPT解决这个技术问题 Extra ChatGPT

如何在 ISO 8601 中的 javascript 中输出日期,无需毫秒和 Z

这是在 JavaScript 中将日期序列化为 ISO 8601 字符串的标准方法:

var now = new Date(); console.log(now.toISOString()); // 输出“2015-12-02T21:45:22.279Z”

我只需要相同的输出,但没有毫秒。我怎样才能输出 2015-12-02T21:45:22Z ? 

(new Date).toISOString().replace(/\.\d+/, "")

b
bessarabov

简单的方法:

console.log(new Date().toISOString().split('.')[0]+"Z");


顺便说一句,这也适用于稍作修改后获取日期:new Date().toISOString().split('T')[0]
请使用 (new Date) 而不是丑陋的 new Date()
s
sdespont

使用 slice 删除不需要的部分

var now = new Date();
alert( now.toISOString().slice(0,-5)+"Z");

这应该是公认的答案,因为它比使用 split() 的解决方案快 10 倍,比正则表达式解决方案快 3 倍。唯一(未列出的)等速解决方案是 now.toISOString().substr(0,19) + "Z"。在处理大型数据集时,额外的速度很有帮助。投票赞成。
@Roberto 如果我正在寻找速度,我会使用 console.log( now.substring(0, now.indexOf('.'))+"Z"); 因为 toISOString() 是 24 或 27 个字符长。 (在我的示例中为 now = new Date().toISOString();
S
STORM

这是解决方案:

var now = new Date(); 
var str = now.toISOString();
var res = str.replace(/\.[0-9]{3}/, '');
alert(res);

找到 . (点)并删除 3 个字符。

http://jsfiddle.net/boglab/wzudeyxL/7/


令我惊讶的是,这实际上比使用拆分的解决方案更快。它还避免了必须添加回 Z. Up 投票,尽管 slice 和 substr 解决方案稍微好一些。
G
Grant Miller

您可以使用 split()shift() 的组合从 ISO 8601 字符串中删除毫秒:

让 date = new Date().toISOString().split('.').shift() + 'Z';控制台日志(日期);


我认为 shift() 可能是矫枉过正,特别是如果你只是想获得数组中的第一个值。这只是额外的开销。
A
Aram

或者可能用这个覆盖它? (这是来自 here 的修改后的 polyfill)

function pad(number) {
  if (number < 10) {
    return '0' + number;
  }
  return number;
}

Date.prototype.toISOString = function() {
  return this.getUTCFullYear() +
    '-' + pad(this.getUTCMonth() + 1) +
    '-' + pad(this.getUTCDate()) +
    'T' + pad(this.getUTCHours()) +
    ':' + pad(this.getUTCMinutes()) +
    ':' + pad(this.getUTCSeconds()) +
    'Z';
};

不错的主意,但由于覆盖原型的危险,该人可能投了反对票!而是扩展它并调用您的方法,例如 Date.prototype.toISOStringSansMilliseconds 或类似的东西
请永远不要更改内置方法。
n
nonopolarity

它类似于@STORM 的回答:

常量日期 = 新日期(); console.log(date.toISOString()); console.log(date.toISOString().replace(/[.]\d+/, ''));


/\.\d+/ 也是可能的。
\. 有时可能难以阅读,所以我改用 [.]