Подтвердить что ты не робот

Сравнение сегодняшней даты с другой датой в данный момент возвращает неправильную дату, почему?

Я использую moment.js 1.7.0, чтобы сравнить сегодняшнюю дату с другой датой, но функция diff говорит, что они по какой-то причине на расстоянии 1 день.

код

var releaseDate = moment("2012-09-25");
var now = moment(); //Today is 2012-09-25, same as releaseDate  
console.log("RELEASE: " + releaseDate.format("YYYY-MM-DD"));
console.log("NOW: " + now.format("YYYY-MM-DD"));
console.log("DIFF: " + now.diff(releaseDate, 'days'));

консоль

RELEASE: 2012-09-25
NOW: 2012-09-25
DIFF: 1 

Идеи?

4b9b3361

Ответ 1

На основе документации (и краткого тестирования), instant.js создает обертку вокруг объектов даты. Утверждение:

var now = moment();

создает объект "момента", который в своем сердце имеет новый объект Date, созданный как будто new Date(), поэтому часы, минуты и секунды будут установлены на текущее время.

Заявление:

var releaseDate = moment("2012-09-25");

создает моментный объект, который в своем сердце имеет новый объект Date, созданный, как если бы он был new Date(2012, 8, 25), где часы, минуты и секунды будут установлены на ноль для локального часового пояса.

moment.diff возвращает значение на основе округленной разницы в мс между двумя датами. Чтобы увидеть полное значение, пройдите true в качестве третьего параметра:

 now.diff(releaseDate, 'days', true)
 ------------------------------^

Таким образом, это будет зависеть от времени суток выполнения кода и локального часового пояса, если now.diff(releaseDate, 'days') равен нулю или одному, даже если он выполняется в одной и той же локальной дате.

Если вы хотите сравнить только даты, используйте:

var now = moment().startOf('day'); 

который установит время в 00:00:00 в локальном часовом поясе.

Ответ 2

Ответ RobG правильный для вопроса, поэтому этот ответ предназначен только для тех, кто ищет, как сравнивать даты в momentjs.

Я попытался использовать startOf ( "день" ), как указано выше:

var compare = moment(dateA).startOf('day') === moment(dateB).startOf('day');

Это не сработало для меня.

Мне пришлось использовать isSame:

var compare = moment(dateA).isSame(dateB, 'day');