[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сравнить 2 даты
Undertaker
Есть у меня 2 даты формата dd-mm-yy hh:mm
Одну из них формирует функция путём

var time_z= day + "-" + month + "-" + year + " " + hours + ":" + minutes

а вторая вводиться в ячейку вручную, в таком же формате.
Как их сравнить правильно? Я пробовал через Date.parse и getTime(), не заработало, с valueOf() скрипт заработал, а потом отказался (я сам не понимаю почему или как)
Как же всётаки её правильно сравнивать?

_____________
Из отчета службы безопасности:
... по поводу взлома китайцами сервера Пентагона:
1) Каждый китаец попробовал один пароль.
2) Каждый второй пароль был - maodzedun.
3) На 657983241-й попытке сервер согласился что у него пароль - maodzedun
moskitos80
Если есть доступ к переменным, с помощью которых функция из условия формирует одну из строк, то возможен такой вариант:


<!DOCTYPE HTML>
<html lang="ru-RU">
<head>
<title>
JAVASCRIPT</title>
</head>
<style></style>
<body>

<form
name="date-form" action="">
<input
name="day" maxlength="2" size="2" /><span>-</span>
<input
name="month" maxlength="2" size="2" /><span>-</span>
<input
name="year" maxlength="4" size="4" /><span> </span>
<input
name="hours" maxlength="2" size="2" /><span>:</span>
<input
name="mins" maxlength="2" size="2" />
<button
type="button" onclick="compareDate(this.form)">Compare</button>
</form>

<script>

// Допустим это переменные, которыми оперирует функция из условия:
var date = new Date(),
year = date.getFullYear(),
month = date.getMonth(),
day = date.getDate(),
hours = date.getHours(),
mins = date.getMinutes(),

compareDate = function (form) {
//Просто используем конструктор Date с аргументами:
var formDate = new Date(
form.year.value,
form.month.value,
form.day.value,
form.hours.value,
form.mins.value
);
// Сравниваем в виде секунд (результат тоже в виде секунд):
console.log(formDate - date);
};
</script>
</body>
</html>



Если кроме строкового представления дат нет ничего, то как вариант рассмотрите этот пример:


//=============================================================
// Случай когда доступны исключительно строковые представления:
//=============================================================
// Фактически, ниже формат dd-mm-yy hh:mm приводится к формату
// yymmddhhmm и в таком виде две даты сравниваются как целые
// числа.

// Для примера поместим строки с датами в переменные:

var date1 = "22-06-1980 16:30",
date2 = "22-06-1980 16:45",
// Разделяем числа даты и времени по пробелу:
arrDate1 = date1.split(" ", 2),
arrDate2 = date2.split(" ", 2),
// Разделяем числа даты на год, месяц и день по символу "-":
arrDate1Date = arrDate1[0].split("-", 3),
arrDate2Date = arrDate2[0].split("-", 3),
// Затираем символы ":" в представлениях времени:
strTime1 = arrDate1[1].replace(":", ""),
strTime2 = arrDate2[1].replace(":", ""),

strDate1 = "",
strDate2 = "";

// Переворачиваем формат с dd mm yy на yy mm dd
arrDate1Date.reverse();
arrDate2Date.reverse();

// Склеиваем числа даты и времени:
strDate1 = arrDate1Date.join("") + strTime1;
strDate2 = arrDate2Date.join("") + strTime2;

// Ниже операция ... << 0 - это просто округление до целых,
// parseInt - здесь не канает, потому что если разница
// между датами будет исчисляться в минутах, то на вход
// parseInt - придет число типа 5е-8 результатом будет "5"
// а это ошибка, операция 5е-8 << 0 даст правильный результат.

// Получить разницу в годах

console.log( ((strDate2 - strDate1) / 100000000) << 0);
// Получить разницу в месяцах
console.log( ((strDate2 - strDate1) / 1000000) << 0);
// Получить разницу в днях
console.log( ((strDate2 - strDate1) / 10000) << 0);
// Получить разницу в часах
console.log( ((strDate2 - strDate1) / 100) << 0);
// Получить разницу в минутах
console.log( ((strDate2 - strDate1)) << 0);


_____________
Сложное - просто. Простое сложно.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.