ChatGPT解决这个技术问题 Extra ChatGPT

How to output date in javascript in ISO 8601 without milliseconds and with Z

Here is a standard way to serialise date as ISO 8601 string in JavaScript:

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

I need just the same output, but without milliseconds. How can I output 2015-12-02T21:45:22Z

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

b
bessarabov

Simple way:

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


BTW, this also works for getting just the date with a slight modification: new Date().toISOString().split('T')[0]
Please use (new Date) instead of the ugly new Date().
s
sdespont

Use slice to remove the undesired part

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

This should be the accepted answer because it's 10x faster than the solutions using split() and 3x faster than the regex solution. The only (unlisted) solution of equal speed is now.toISOString().substr(0,19) + "Z". And extra speed is helpful when using this with large data sets. Up voted.
@Roberto If I was looking for speed, I would use console.log( now.substring(0, now.indexOf('.'))+"Z"); since toISOString() is 24 or 27 characters long. (now = new Date().toISOString(); in my example)
S
STORM

This is the solution:

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

Finds the . (dot) and removes 3 characters.

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


Surprised me that this is actually faster than the solutions using split. And it also avoids having to add back the Z. Up voted, though the slice and substr solutions are slightly better.
G
Grant Miller

You can use a combination of split() and shift() to remove the milliseconds from an ISO 8601 string:

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


I think shift() might be overkill especially if you're just trying to get the first value in the array. It's just extra overhead.
A
Aram

or probably overwrite it with this? (this is a modified polyfill from here)

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';
};

Not a bad idea but the person probably down voted because of the dangers of overwriting the prototype! Extend it instead and call your method something like Date.prototype.toISOStringSansMilliseconds or some such
Please never change builtin methods.
n
nonopolarity

It is similar to @STORM's answer:

const date = new Date(); console.log(date.toISOString()); console.log(date.toISOString().replace(/[.]\d+/, ''));


/\.\d+/ is also possible.
the \. can be difficult to read sometimes, so I have changed into using [.]