Сравнение двух дат с использованием javascript или datejs (разница дат) - PullRequest
10 голосов
/ 03 августа 2011

Я пытаюсь сравнить две даты в финской форме времени следующим образом: дд.мм.ггг или дмггг или дд.м.ГГГГ или д.мм.ГГГГ.

У меня труднаяКогда я узнаю, как это сделать, мой текущий код не будет работать.

<script src="inc/date-fi-FI.js" type="text/javascript"></script>
<script type="text/javascript">
    function parseDate() {
        var date = $('#date').val();
        var parsedDate = Date.parse(date);
        alert('Parsed date: '+parsedDate);
    }
    function jämförMedIdag (datum) {
    if (datum == null || datum == "") {
        alert('Inget datum!');
        return;
    }
    /*resultat = Date.compare(Datum1,Datum2);
    alert(resultat); */
    var datum = Date.parse(datum);
    var dagar = datum.getDate();
    var månader = datum.getMonth();
    var år = datum.getYear();
    var nyttDatum = new Date();
    nyttDatum.setFullYear(år,månader,dagar);
    var idag = new Date();

    if(nyttDatum>idag) {
        var svar = nyttDatum - idag;
        svar = svar.toString("dd.MM.yyyy");
        alert(svar);
        return(svar);
    } else {
        var svar = idag - nyttDatum;
        svar = svar.toString("dd.MM.yyyy");
        alert(svar);
        return(svar);
    }
}    
</script>

Этот код будет пытаться вычислить разницу между двумя датами, одна из которых - сегодня.Нет успеха, лолз.

Заранее спасибо!

Мой окончательный код (спасибо RobG!):

function dateDiff(a,b,format) {
    var milliseconds = toDate(a) - toDate(b);
    var days = milliseconds / 86400000;
    var hours = milliseconds / 3600000;
    var weeks = milliseconds / 604800000;
    var months = milliseconds / 2628000000;
    var years = milliseconds / 31557600000;
    if (format == "h") {
        return Math.round(hours);
    }
    if (format == "d") {
        return Math.round(days);
    }
    if (format == "w") {
        return Math.round(weeks);
    }
    if (format == "m") {
        return Math.round(months);
    }
    if (format == "y") {
        return Math.round(years);
    }
}

Это не совсем точно, но очень близко.Я добавил несколько дополнений к нему, чтобы вычислить день недели, месяц, год или час, и любой желающий может свободно скопировать и использовать этот код.

Ответы [ 3 ]

10 голосов
/ 21 сентября 2011

Если вы используете Datejs и дополнительный модуль time.js, вы можете выполнить свои вычисления с помощью следующего кода, создав объект TimeSpan:

Пример

// dd.mm.YYYY or d.m.YYYY
// dd.m.YYYY or d.mm.YYYY

var start = Date.parse("20.09.2011"); 
var end = Date.parse("28.09.2011");

var span = new TimeSpan(end - start);

span.days; // 8

Конечно, вышесказанное можно упростить до одной строки, если вы действительно хотите быть кратким.

Пример

new TimeSpan(Date.parse(end) - Date.parse(start)).days; // pass 'end' and 'start' as strings

Надеюсь, этопомогает.

2 голосов
/ 03 августа 2011

Если ваши даты представляют собой строки в общей форме d / m / y или какой-либо их вариант, вы можете использовать:

function toDate(s) {
  var s = s.split('/');
  return new Date(s[2], --s[1], s[0]);
}

Вы можете подтвердить ввод, или нет, в зависимости от того, насколько уверенновы находитесь в согласованности предоставленных данных.

Изменить, чтобы ответить на комментарии

Чтобы разрешить различные разделители (например, точка (.) или дефис (-)), регулярное выражение для разделения можетbe:

  var s = s.split(/[/\.-]/);

Дата будет разделена на числа даты, месяца и года соответственно.Части передаются в конструктор Date для создания локального объекта даты для этой даты.Поскольку месяцы javascript имеют нулевое индексирование (январь равен 0, февраль равен 1 и т. Д.), Номер месяца должен быть уменьшен на единицу, следовательно, --s[1].

/ Edit

Для сравнения двух датобъекты (т.е. получают разницу в миллисекундах) просто вычитают один из другого.Если вы хотите получить результат в днях, то разделите его на число миллисекунд в дне и раунде (чтобы учесть любые незначительные различия, вызванные переходом на летнее время).

Так что, если вы хотите увидеть, сколько дней междусегодня и дата, используйте:

function diffToToday(s) {
  var today = new Date();
  today.setHours(0,0,0);
  return Math.round((toDate(s) - today) / 8.64e7);
}

alert(diffToToday('2/8/2011')); // -1
alert(diffToToday('2/8/2012')); // 365

PS.«Финский» формат данных - это тот формат, который используется в подавляющем большинстве стран мира, которые не используют даты в формате ISO.

0 голосов
/ 03 апреля 2013

Использование объекта Date:

var today = Date.today();
var dateToday = Date.parse(today.toString('MMMM d, yyyy'));

var prevMonthDate = dateToday.addDays(-30);

var difference = (dateToday - prevMonthDate)/86400000;

console.log(difference);   //will give you the difference in days. 
...