Не удалось переопределить Date toString в node.js - PullRequest
0 голосов
/ 12 марта 2019

В node.js:

Date.prototype.toString = function dateToString() {
 return `${this.getMonth()}/${this.getDate()} of ${this.getFullYear()}`
};
console.log("====>", new Date(2019, 0, 1))

Я ожидаю "2/11 из 2019", вместо этого я получаю "2019-01-01T02: 00: 00.000Z".

Файл node.js не работает?

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Вы можете подумать, что регистрация Date вызывает функцию toString объекта Date, поэтому вы можете просто переопределить ее, но это не обязательно так. Некоторые реализации будут давать вам вывод, похожий на toISOString вместо toString. Нигде в спецификации ECMAScript он не определяет, как console.log должен вести себя. Даже в стандарте консоли WhatWG в нем не описывается, как регистрировать Date объекты - так что вы находитесь в зависимости от реализации.

Таким образом, вместо переопределения функции в прототипе Date, вам придется переопределить функцию console.log , проверить, передан ли ей аргумент Date, и если поэтому вместо этого преобразуйте его в строку, а затем передайте ее исходной функции console.log. Я оставлю это на ваше усмотрение (или кому-то еще) для реализации.

Или просто не забудьте позвонить .toString(), как показал ChuongTran в своем ответе.

0 голосов
/ 12 марта 2019

Я думаю, что node.js не сломан.Но вам нужно вызвать toString (), чтобы получить строку в console.log

 Date.prototype.toString = function dateToString() {
  return `${this.getMonth()}/${this.getDate()} of ${this.getFullYear()}`
 };
 var date = new Date(2019, 0, 1);
 console.log("====>", date.toString());
 console.log("====>", date.toDateString());

Вывод:

====> 0/1 из 2019

====> вт. 01 января 2019

...