Как использовать цепочку функций с датами в JavaScript? - PullRequest
1 голос
/ 07 мая 2019

рассмотрим код

 const monthString = new Date().setMonth(2).toLocaleString('en-US', { month: 'long' });

Я бы ожидал, что значение monthString будет 'March'.однако на самом деле результат равен

 '1,554,667,062,064'

С другой стороны, если я разбиваю действия на разные этапы

 const date = new Date();
 date.setMonth(2);
 const monthString = date.toLocaleString('en-US', { month: 'long' })

, значение monthString равно 'March'

Из того, что я могу сказать setDate() возвращает число, то есть дату в мс.

Также у прототипа Number есть функция toLocaleString.

Есть ли способ с функциейцепочка, чтобы переопределить это поведение?

Или это единственный способ создать новую переменную и обратиться к ней?

Ответы [ 3 ]

4 голосов
/ 07 мая 2019

Требуя, чтобы это было в одной строке с функциями сцепления, вы можете заключить полученную метку времени в другую дату:

const monthString = new Date(new Date().setMonth(2)).toLocaleString('en-US', { month: 'long' });

console.log(monthString);

В качестве альтернативы, передайте номер месяца в конструктор Date, чтобы получить название месяца.

new Date('2').toLocaleString('en-US', { month: 'long' })))

Примечание: число, передаваемое в конструктор, должно быть строкой.

['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
  .forEach(month => 
    console.log(new Date(month).toLocaleString('en-US', { month: 'long' }))
  )
3 голосов
/ 07 мая 2019

new Date().setMonth(3) возвращает метку времени Unix, а не объект даты.
Date.setMonth ()

так

new Date()
    .setMonth(3) // => returns 1554667062064
    .toLocaleString('en-US', { month: 'long' }); // => returns "1,554,667,062,064"


если вы хотите красиво обернуть, вы можете продлить дату

let DatePlus = class extends Date {
 setMonth(num){
    super.setMonth(num);
    return this;    
 }   
}

new DatePlus ()
    .setMonth(3) // => returns Sun Apr 07 2019 16:24:40 GMT-0400 (Eastern Daylight Time)
    .toLocaleString('en-US', { month: 'long' }); // => returns "4/7/2019, 4:24:40 PM"

0 голосов
/ 07 мая 2019

Есть способ, но он более многословен и менее читабелен, чем просто объявление переменной:

const d = new Date(new Date().getFullYear(), 2).toLocaleString('en-US', { month: 'long' });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...