2015-03-26 2 views
-1

Я хочу получить все даты между startDate и endDate., создавая диапазон дат от 2 дат с linq.js и momentjs

Я завершаю startDate/endDate с помощью момента() снова, чтобы клонировать start/endDate, потому что они не должны быть изменены.

Но все-таки getDateRange дает мне странные результаты о датах:

testCase.startDate = moment(new Date(2014, 0, 1)); 
testCase.endDate = moment(new Date(2014, 0, 27)); 

Хотя обе даты в 2014 году я получаю DateRange с декабря 2013 дней?

Почему?

function getDateRange(startDate, endDate) { 
    return Enumerable.range(0, moment(endDate).diff(moment(startDate), 'days') + 1) 
     .select(function (offset) { 
     return moment(startDate).add(offset, 'days') 
     }) 
     .toArray(); 
    } 

UPDATE

enter image description here

ответ

0

Ваш запрос выглядит, как он должен работать. Возможно, вы неправильно интерпретируете даты. Помните, только месяц начинается с 0. Возможно, вы тоже компенсируете год, когда смотрите на ценности.

Вот альтернативный способ вы можете написать запрос:

function getDateRange(startDate, endDate) { 
    return Enumerable.Unfold(startDate, "moment($).add(1, 'd')") 
     .TakeWhile(function (d) { return d <= endDate; }) 
     .ToArray(); 
} 

Основываясь на том, что я вижу в комментариях, по-видимому вы используете методы, которые мутируют дату. Вы либо захотите избегать использования этих методов, либо сначала клонировать дату, а манипулировать клонами.

// without cloning 
var date1 = moment.utc([2014, 0, 1]); 
console.log(String(date1)); // Wed Jan 01 2014 00:00:00 GMT+0000 
var startOfDate1 = date1.startOf('week'); // mutated 
console.log(String(date1)); // Sun Dec 29 2013 00:00:00 GMT+0000 

// using moment() 
var date2 = moment.utc([2014, 0, 1]); 
console.log(String(date2)); // Wed Jan 01 2014 00:00:00 GMT+0000 
var startOfDate2 = moment(date2).startOf('week'); // not mutated 
console.log(String(date2)); // Wed Jan 01 2014 00:00:00 GMT+0000 

// using clone() 
var date3 = moment.utc([2014, 0, 1]); 
console.log(String(date3)); // Wed Jan 01 2014 00:00:00 GMT+0000 
var startOfDate3 = date3.clone().startOf('week'); // not mutated 
console.log(String(date3)); // Wed Jan 01 2014 00:00:00 GMT+0000 
+0

Я добавил скриншот, чтобы вы могли судить сами! – Elisabeth

+0

Хмм, я не уверен, почему это может произойти, и особенно благодаря этому большому смещению. Возможно, попробуйте использовать все даты utc? Посмотрите, если это имеет значение. –

+0

Вот [скрипка] (http://jsfiddle.net/jeff1203/9xa9nnkn/), которую я использовал для тестирования. Я сейчас в Тихоокеанском часовом поясе (UTC-7), но я не думаю, что это важно. –

Смежные вопросы