Консоль использует toString
для преобразования дат (и других объектов) в строку для печати. Таким образом, вы можете переопределить Date.prototype.toString
, чтобы изменить то, что печатается. Демонстрация (скопированная из сеанса консоли Chrome):
> var d = new Date()
> console.log(d)
< Sun May 19 2019 14:29:02 GMT+0200 (Central European Summer Time)
> Date.prototype.toString = Date.prototype.toLocaleString
< ƒ toLocaleString() { [native code] }
> console.log(d)
< 5/19/2019, 2:29:02 PM
> console.log({a:new Date()})
< {a: 5/19/2019, 2:31:21 PM}
Отдельная проблема заключается в том, что JSON.stringify({a: 1})
дает {"a":1}
, тогда как console.log({a: 1})
печатает {a: 1}
(без кавычек вокруг a
). Это не связано с датами и связано с тем, что JSON является очень ограниченным подмножеством JavaScript ({a: 1}
является допустимым JavaScript, но не допустимым JSON). Кроме того, console.log
предназначен для потребления человеком, не требуется, чтобы выходные данные могли быть проанализированы обратно к исходному объекту (объектам) - просто посмотрите, что console.log(new Array(100))
делает: -)
Редактировать: вышесказанное верно для Chrome. Поскольку объект console
не охватывается спецификацией ECMAScript, каждый встроенный модуль может предоставить там все, что он считает полезным. Node.js использует util.format
, который, в свою очередь, использует util.inspect
, который, в свою очередь, получает toISOString
функцию от изначальной Date.prototype
, что означает, что вы не можете переопределить его (что является функцией, потому что это означает, что вы не можете ее сломать, или ограничением, потому что это означает, что вы не можете настроить его, в зависимости от вашей точки зрения).