Сравнение двух дат с использованием javascript или datejs (разница дат)
Я пытаюсь сравнить две даты в финской форме времени следующим образом: дд.мм.ГГГГ или дмГГГГ или дд.м.ГГГГ или д.мм.ГГГГ.
Мне трудно понять, как это сделать, мой текущий код не будет работать.
<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 ответа
Если ваши даты представляют собой строки в общей форме d/m/y или их разновидности, вы можете использовать:
function toDate(s) {
var s = s.split('/');
return new Date(s[2], --s[1], s[0]);
}
Возможно, вы захотите проверить ввод или нет, в зависимости от того, насколько вы уверены в согласованности предоставленных данных.
Изменить, чтобы ответить на комментарии
Чтобы разрешить различные разделители (например, точка (.) Или дефис (-)), регулярное выражение для разделения может быть:
var s = s.split(/[/\.-]/);
Дата будет разделена на дату, месяц и год соответственно. Части передаются в конструктор Date для создания локального объекта даты на эту дату. Поскольку месяцы javascript имеют нулевую индексацию (январь равен 0, февраль равен 1 и т. Д.), Номер месяца должен быть уменьшен на единицу, следовательно --s[1]
,
/Редактировать
Чтобы сравнить два объекта даты (т.е. получить разницу в миллисекундах), просто вычтите один из другого. Если вы хотите получить результат в днях, то разделите его на количество миллисекунд в дне и раунде (чтобы учесть любые незначительные различия, вызванные переходом на летнее время).
Поэтому, если вы хотите узнать, сколько дней проходит между сегодняшним днем и датой, используйте:
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.
Если вы используете 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
Надеюсь это поможет.
С использованием 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.