Javascript DateDiff

У меня проблема с функцией DateDiff. Я пытаюсь выяснить разницу между двумя датами/временем. Я прочитал это сообщение (Как лучше всего рассчитать разница дат в Javascript), и я также просмотрел этот учебник (http://www.javascriptkit.com/javatutors/datedifference.shtml), но я не могу его понять.

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

//Set the two dates
var currentTime = new Date();
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
var currDate = month + "/" + day + "/" + year;
var iniremDate = "8/10/2012";

//Show the dates subtracted
document.write('DateDiff is: ' + currDate - iniremDate);

//Try this function...
function DateDiff(date1, date2) {
    return date1.getTime() - date2.getTime();
}

//Print the results of DateDiff
document.write (DateDiff(iniremDate, currDate);

person Frank G.    schedule 17.08.2012    source источник


Ответы (3)


Ваша первая попытка сначала выполняет сложение, а затем вычитание. Вы все равно не можете вычитать строки, так что получается NaN.

Вторая попытка не имеет закрытия ). Кроме того, вы вызываете getTime для строк. Вам нужно будет использовать new Date(...).getTime(). Обратите внимание, что вы получаете результат в миллисекундах при вычитании дат. Вы можете отформатировать это, убрав полные дни/часы/и т. д.

person pimvdb    schedule 17.08.2012
comment
Как вы сказали, это покажет отрицательное значение. Правильно ли это, кажется правильным, потому что он показывает отрицательные значения. document.write(новая дата(iniremDate)-новая дата(currDate)); function DateDiff(date1, date2) { return date1.getTime() - date2.getTime(); } document.write (DateDiff(новая дата(iniremDate),новая дата(currDate))); - person Frank G.; 17.08.2012
comment
Поскольку iniremDate — это 10 августа, а сейчас 17, вы, очевидно, получите отрицательное значение. Если вы хотите вычесть обратное, просто вычтите date1 из date2. - person pimvdb; 17.08.2012
comment
Возвращаемое значение -604800000, я так понимаю, это означает, что оно прошло так давно в секундах? - person Frank G.; 17.08.2012
comment
@Frank G: Это в миллисекундах. Если вы конвертируете это в дни, это действительно 7 дней назад: -604800000 / (24*60*60*1000) === -7. - person pimvdb; 17.08.2012
comment
Да, вы правы, спасибо, я смог заставить его работать, спасибо за помощь. Я разместил полный рабочий пример ниже для других, которые могут искать помощь в этом!!! Спасибо - person Frank G.; 17.08.2012

Хорошо для тех, кто хотел бы получить рабочий пример, вот простой пример DateDiff, который сообщает разницу дат по дням в отрицательном значении (дата уже прошла) или положительном (дата приближается).

РЕДАКТИРОВАТЬ: я обновил этот скрипт, чтобы он выполнял всю работу за вас и преобразовывал результаты в в данном случае -10, что означает, что дата прошла. Введите свои собственные даты для currDate и iniPastedDate, и все готово!

//Set the two dates
var currentTime   = new Date()
var currDate      = currentTime.getMonth() + 1 + "/" + currentTime.getDate() + "/" + currentTime.getFullYear() //Todays Date - implement your own date here.
var iniPastedDate = "8/7/2012" //PassedDate - Implement your own date here.

//currDate = 8/17/12 and iniPastedDate = 8/7/12

function DateDiff(date1, date2) {
    var datediff = date1.getTime() - date2.getTime(); //store the getTime diff - or +
    return (datediff / (24*60*60*1000)); //Convert values to -/+ days and return value      
}

//Write out the returning value should be using this example equal -10 which means 
//it has passed by ten days. If its positive the date is coming +10.    
document.write (DateDiff(new Date(iniPastedDate),new Date(currDate))); //Print the results...
person Frank G.    schedule 17.08.2012
comment
Обратите внимание, что это довольно ограничено - getDay возвращает день недели, поэтому его можно использовать только в том случае, если обе даты относятся к одной неделе (iniremDate = "8/8/2012" даст тот же результат). - person pimvdb; 17.08.2012
comment
@pimvdb, что, если вы используете getTime, работает ли это для любой даты? - person Frank G.; 17.08.2012
comment
getTime не относится к текущей неделе или что-то в этом роде; он дает уникальный номер для каждой даты, поэтому он надежен для ваших нужд. Единственная проблема заключается в том, что вам нужно будет самостоятельно преобразовать разницу в миллисекундах в разницу в днях. - person pimvdb; 17.08.2012
comment
Я должен сказать, что кажется, что не каждый язык когда-либо имеет хороший DateDiff и, как бы ни была важна функция, вы могли бы подумать, что они прикроют это для вас ... сделайте жизнь немного проще! - person Frank G.; 17.08.2012
comment
@pimvdb Сейчас я обновил скрипт, чтобы он выполнял работу за людей. Спасибо за помощь в этом!! :) - person Frank G.; 17.08.2012
comment
@pimvdb, может быть, это поможет кому-то в поисках! По крайней мере, это укажет им правильное направление. - person Frank G.; 17.08.2012

Нет необходимости включать JQuery или любую другую стороннюю библиотеку.

Укажите формат ввода даты в теге title.

HTML:

< script type="text/javascript" src="http://services.iperfect.net/js/IP_generalLib.js">

Используйте функцию JavaScript:

IP_dateDiff(strDate1,strDate2,strDateFormat,debug[true/false])

alert(IP_dateDiff('11-12-2014','12-12-2014','DD-MM-YYYY',false));

Функция IP_dateDiff вернет количество дней.

person Neeraj Dhekale    schedule 02.09.2015