2012-01-19 3 views
1

Я пытаюсь выполнить расчет даты в javascript, который соответствует одному в excel.Расчеты с расписанием вычислений в формате Excel и javascript различаются

//Excel 
=(EDATE(DATE(2000,6,1),60)-DATE(2012,1,20)) 

Это дает результат -2424

Так что я пытаюсь сделать то же самое вычисление в JavaScript следующим

//Javascript - using datejs library 
a = Date.parse('2000/06/01').addMonths(60); 
b = Date.parse('2012/01/20'); 
a.setHours(12,0,0); 
b.setHours(12,0,0); 
span = new TimeSpan(a - b); 
console.log(span.getDays()); 

Это дает результат -2423

I не вижу, почему я теряю день. Может ли кто-нибудь пролить свет на то, как это могло произойти.

Приветствия за любую помощь заранее. :)

+1

Можете ли вы попробовать распечатать то, что вычисляется 'EDATE()' и 'addMonths()', чтобы увидеть, ссылаются ли они на тот же день? –

+0

Результат Excel является правильным: с 2005-06-01 вам нужно 30 + 31 + 31 + 30 + 31 + 30 + 31, чтобы перейти на 2006-01-01, затем 365 * 6 + 1 (2008 високосный год), чтобы добраться до 2012-01-01, затем 19 дней, чтобы добраться до 2012-01-20. –

ответ

1

Если ничего другого, в 2005 и 2008 годах произошли две leapseconds (оба по 31 декабря), которые любое приложение могло принимать во внимание. Вы явно установили даты JS в «полдень», но не указали раз для Excel, поэтому, вероятно, это не работает до полуночи, а именно, когда происходит липсекс. Это заставит вашу дату/время Excel быть на расстоянии 2 секунд от вычетов JS и может пересечь границу полуночи, учитывая ваш отсутствующий день.

+0

У меня изначально не было настроек в полдень, но получил тот же результат, поэтому после прочтения некоторых сообщений здесь я добавил его, чтобы посмотреть, поможет ли это, но, увы, этого не произошло. – dibs

+0

Я установил время обеих дат в javascript до полуночи и, похоже, решил проблему. Спасибо за вашу помощь. – dibs