2014-12-10 1 views
0

Я пытаюсь найти разницу между двумя датами. Даты получаются с jquery, и я также использую datejs. При использовании datejs он подбирает мою дату, поскольку США думают, что это MM/DD/YYYY вместо dd-mm-yyyy. Мой результат для разницы - NaN. Как мне это решить. Я вдали или где-то рядом?Найти разницу между двумя датами с помощью javascript

var msMinute = 60*1000, 
    msDay = 60*60*24*1000; 

start = $('#reconcile_start_date').val(); // 10-12-2014 | dd-mm-yyyy 
end = $('#reconcile_end_date').val();   // 15-12-2014 | dd-mm-yyyy 

start = new Date(start); 
end = new Date(end); 

console.log(Math.floor((end - start)/msDay) + ' full days between ' + end + ' and ' + start); 
difference = Math.floor((end - start)/msDay); 

if(difference > 30){} 
+2

Эта библиотека может быть очень полезной: http://momentjs.com/ – melancia

+0

Я думаю, что это больше связано с тем, как я использую datejs. По какой-то причине он не любит новую дату ('10 -12-2014). Есть ли способ отформатировать это? Я не вижу (или, может быть, я пропустил это) в документации –

+1

Если вы передадите параметры в конструктор 'Date' один за другим (год, месяц, день), вы получите то, что ожидаете. Не передавайте его как строку. – melancia

ответ

1

попробовать это:

$(document).ready(function(){ 

    var msMinute = 60*1000; 
    var msDay = 60*60*24*1000; 

    var start = '10-12-2014'; // October 12 
    var statarr=start.split('-'); 

    var end = '12-15-2014'; // December 15 
    var endarr=end.split('-'); 

    var dstart = new Date(statarr[0]+'/'+statarr[1]+'/'+statarr[2]).getTime(); 
    var dend = new Date(endarr[0]+'/'+endarr[1]+'/'+endarr[2]).getTime(); 

    var diff = parseInt(dend-dstart); 

    console.log(Math.floor(diff/msDay) + ' full days between ' + end + ' and ' + start); 
    difference = Math.floor((end - start)/msDay); 

    if(difference > 30){ 
    } 
    }); 

// для Великобритании формиата использовать это:

var start = '12-10-2014'; // October 12 
    var statarr=start.split('-'); 

    var end = '15-12-2014'; // December 15 
    var endarr=end.split('-'); 

    var dstart = new Date(statarr[1]+'/'+statarr[0]+'/'+statarr[2]).getTime(); 
    var dend = new Date(endarr[1]+'/'+endarr[0]+'/'+endarr[2]).getTime(); 

и остальное такое же.

+0

Можете ли вы получить эту работу за Великобритания. Итак, начало = 12-10-2014 -> 12 октября 2014 года –

+0

вы имеете в виду к 12 октября 2014 года или 12-10-2014. –

+0

Да, извините, я понял это позже, просто двигая массив. Благодарю. –

0

Проблема заключается в разборе дат, по умолчанию JS не анализирует дату в формате.

Вот еще несколько примеров того, как преобразовать формат даты из формата в Великобритании можно найти (Why does Date.parse give incorrect results?)

Больше информации о DateString парам, форматов и поведение браузера - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

Смотрите этот образец. http://jsbin.com/fayerihipu/2/

$(document).ready(function(){ 

var msMinute = 60*1000, 
var msDay = 60*60*24*1000; 

var start = '10-12-2014'; // October 12 
var end = '12-15-2014'; // December 15 

var dstart = new Date(start).getTime(); 
var dend = new Date(end).getTime(); 

var diff = parseInt(dend-dstart); 

console.log(Math.floor(diff/msDay) + ' full days between ' + end + ' and ' + start); 
difference = Math.floor((end - start)/msDay); 

if(difference > 30){ 
} 
}); 
+0

эта новая дата (начало) даст недопустимую дату, а затем, как вы используете getTime() в теме. –

+0

Проверьте ссылку на скрипку. Форматы входов были переключены для отображения. Для преобразования даты из британского формата вам необходимо использовать метод преобразования, указанный выше. – LiamB

+0

Но этот результат неправильный «1156 полных дней между 15-12-2014 и 12-10-2014» Должен быть только 64, я думаю, но определенно не 1156 –

0

Официально только формат даты поддерживается JavaScript является упрощенной версией ISO-8601: yyyy-mm-dd, и почти все браузеры поддерживают yyyy/mm/dd, а также.

Так что вам нужно сделать что-то вроде этого, чтобы разобрать даты:

var parts = start.split('-'); 
start = new Date(parseInt(parts[2], 10), 
       parseInt(parts[1], 10) - 1, 
       parseInt(parts[0], 10)); 
//Date uses zero-based month numbers, and so we have to subtract one from the month number 

Посмотрите here для более подробной информации.