startOfMonth возвращает последний день месяца до - PullRequest
0 голосов
/ 10 ноября 2018

Так что все довольно просто:

import startOfMonth from 'date-fns/start_of_month';

export const getFirstDayThisMonth = date => {
  const firstDay = startOfMonth(date);
  return firstDay;
};

с учетом ввода (например):
1987-02-02T00:00:00.000Z

возвращает:
1987-01-31T23:00:00.000Z

Ошибка воспроизводится точно при попытке произвести первое свидание по методу, указанному в этот ответ :

var date = new Date();
var firstDay = new Date(date.getFullYear(), date.getMonth(), 1);

Ошибка возникает при выполнении jest-тестов и не можетбыть воспроизведенным в консоли, где он работает, как ожидалось:

const day1 = new Date('1987-02-02');
undefined
const day2 = new Date(day1.getFullYear(),day1.getMonth(),1)
undefined
day2
Sun Feb 01 1987 00:00:00 GMT+0100 (Central European Standard Time)

Если во втором решении я также установил четвертый аргумент (час) равным 1, он правильно обрабатывает:

1987-02-02T00:00:00.000Z
возврат 1987-02-01T00:00:00.000Z

и

2001-03-03T00:00:00.000Z
возврат 2001-03-01T00:00:00.000Z

но

2002-04-04T00:00:00.000Z
возвращает 2002-03-31T23:00:00.000Z

Я действительно в растерянности относительно того, что может быть причиной этой проблемы, такое ощущение, что есть некоторый переход на предыдущую дату, когда время установлено на 00: 00: 00?


Для запроса вот date-fns -код для startOfMonth:

function startOfMonth (dirtyDate) {
  var date = parse(dirtyDate)
  date.setDate(1)
  date.setHours(0, 0, 0, 0)
  return date
}

Я действительно не понимаю, почему

var date = new Date();
var firstDay = new Date(date.getFullYear(), date.getMonth(), 1, 1);

кажетсяработать нафевраль, но не в апреле?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...