如何在没有毫秒和Z的情况下在ISO 8601中的javascript中输出日期

bes*_*bov 45 javascript date iso8601

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

var now = new Date();
console.log( now.toISOString() );
// outputs '2015-12-02T21:45:22.279Z'
Run Code Online (Sandbox Code Playgroud)

我需要相同的输出,但没有毫秒.我怎么输出2015-12-02T21:45:22Z? 

Blu*_*oth 89

简单方法:

console.log( now.toISOString().split('.')[0]+"Z" );
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,这也适用于获取经过稍微修改的日期:`new Date()。toISOString()。split('T')[0]` (5认同)
  • 避免使用正则表达式是我书中的一个优点;) (3认同)

STO*_*ORM 9

这是解决方案:

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

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

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

  • 令我惊讶的是,这实际上比使用 split 的解决方案更快。而且它还避免了必须添加回 Z.Up 投票,尽管切片和 substr 解决方案稍好一些。 (2认同)

sde*_*ont 7

使用切片删除不需要的部分

var now = new Date();
alert( now.toISOString().slice(0,-5)+"Z");
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案,因为它比使用 split() 的解决方案快 10 倍,比正则表达式解决方案快 3 倍。唯一(未列出)相同速度的解决方案是 now.toISOString().substr(0,19) + "Z"。当将其用于大型数据集时,额外的速度会很有帮助。投票了。 (5认同)

nop*_*ole 6

与@STORM的答案类似:

const date = new Date();

console.log(date.toISOString());
console.log(date.toISOString().replace(/[.]\d+/, ''));
Run Code Online (Sandbox Code Playgroud)


Gra*_*ler 5

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

let date = new Date().toISOString().split('.').shift() + 'Z';

console.log(date);
Run Code Online (Sandbox Code Playgroud)