Skip to content

Commit

Permalink
util,test: Use consistent Date representation for util/inspect
Browse files Browse the repository at this point in the history
Re: #4314
`Inspect` formats dates in two different ways, depending on
whether it has properties or not.

No properties and it uses `toString`.
https://github.com/nodejs/node/blob/master/lib/util.js#L272
> The toString() method always returns a string representation of
> the date in American English.

While when properties are present it uses `toUTCString`.
https://github.com/nodejs/node/blob/master/lib/util.js#L393

> The format of the return value may vary according to the platform.
> The most common return value is a RFC-1123 formatted date stamp,
> which is a slightly updated version of RFC-822 date stamps.

I am wondering why two different representations are used?

And being 2015, it would seem sensible to use `toISOString`.

> The toISOString() method returns a string in simplified
> extended ISO format (ISO 8601), which is always 24 characters
> long: YYYY-MM-DDTHH:mm:ss.sssZ. The timezone is always zero
> UTC offset, as denoted by the suffix "Z".

./configure
make test
Total errors found: 0
  • Loading branch information
Xotic750 committed Dec 17, 2015
1 parent e5774c9 commit fa0442c
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
4 changes: 2 additions & 2 deletions lib/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ function formatValue(ctx, value, recurseTimes) {
return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
}
if (isDate(value)) {
return ctx.stylize(Date.prototype.toString.call(value), 'date');
return ctx.stylize(Date.prototype.toISOString.call(value), 'date');
}
if (isError(value)) {
return formatError(value);
Expand Down Expand Up @@ -390,7 +390,7 @@ function formatValue(ctx, value, recurseTimes) {

// Make dates with properties first say the date
if (isDate(value)) {
base = ' ' + Date.prototype.toUTCString.call(value);
base = ' ' + Date.prototype.toISOString.call(value);
}

// Make error with message first say the error
Expand Down
10 changes: 8 additions & 2 deletions test/parallel/test-util-inspect.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ assert.equal(util.inspect(undefined), 'undefined');
assert.equal(util.inspect(null), 'null');
assert.equal(util.inspect(/foo(bar\n)?/gi), '/foo(bar\\n)?/gi');
assert.equal(util.inspect(new Date('Sun, 14 Feb 2010 11:48:40 GMT')),
new Date('2010-02-14T12:48:40+01:00').toString());
new Date('2010-02-14T12:48:40+01:00').toISOString());

assert.equal(util.inspect('\n\u0001'), "'\\n\\u0001'");

Expand Down Expand Up @@ -220,7 +220,7 @@ assert.equal(util.inspect(value), '{ /123/gi aprop: 42 }');
// Dates with properties
value = new Date('Sun, 14 Feb 2010 11:48:40 GMT');
value.aprop = 42;
assert.equal(util.inspect(value), '{ Sun, 14 Feb 2010 11:48:40 GMT aprop: 42 }'
assert.equal(util.inspect(value), '{ 2010-02-14T11:48:40.000Z aprop: 42 }'
);

// test the internal isDate implementation
Expand Down Expand Up @@ -313,6 +313,12 @@ assert.doesNotThrow(function() {
util.inspect(d);
});

assert.doesNotThrow(function() {
var d = new Date();
d.toISOString = null;
util.inspect(d);
});

assert.doesNotThrow(function() {
var r = /regexp/;
r.toString = null;
Expand Down

0 comments on commit fa0442c

Please sign in to comment.