Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: сколько времеи между двумя датами

Сообщения:  [1-6] 

 
 автор: PAT   (24.05.2008 в 20:26)   письмо автору
 
   для: studentPO   (24.05.2008 в 12:55)
 

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=win-1251">
<script>
onload = function () {document.getElementById ('d1').focus ()} //*1
function ComeOn () //*2
{
for (var timeValue = new Array (), j = 1; j < 3; j++) //*3
   {
   var x = document.getElementById ('d' + j).value;   //*4
   if (x.replace (/\d\d-\d\d-\d{4}/i, '').length || !x.length) //*5
      {
      alert ('Формат ' + ((j == 1) ? 'перв' : 'втор') + 'ой даты неверен!');
      document.getElementById ('d' + j).select ();
      return; //*6
      }
   else //*7
      {
      var DoM = '313232332323'.split (''); //*8
      var dmy = x.split ('-');
      for (var k = 0; k < dmy.length; k++) dmy [k] = parseInt (dmy [k]); dmy [1]--; //*9
      var rezTest = true; //*10
      if (!dmy [2]) rezTest = false; //*11
      if (dmy [0] < 1 || dmy [0] > (28 + DoM [dmy [1]])) rezTest = false; //*12
      if (dmy [1] < 0 || dmy [1] > 11) rezTest = false; //*13
      var leapYear = (((dmy [2] % 100 != 0) && (dmy [2] % 4 == 0)) || (dmy [2] % 400 == 0)); //*14
      if (dmy [1] == 1 && !leapYear && dmy [0] == 29) rezTest = false; //*15
      if (!rezTest)
         {
         alert ('В ' + ((j == 1) ? 'перв' : 'втор') + 'ое поле введена несуществующая дата!');
         document.getElementById ('d' + j).select ();
         return; //*16
         }
      }
   timeValue [j] = dmy; //*17
   }
var d = new Date (); //*18
for (var TimeMS = new Array (), j = 1; j < 3; j++)
   {
   d.setDate  (timeValue [j] [0]);
   d.setMonth (timeValue [j] [1]);
   d.setYear  (timeValue [j] [2]);
   TimeMS [j] = d.valueOf (); //*19
   }
var x = Math.floor (Math.abs (TimeMS [1] - TimeMS [2]) / 1000 / 60 / 60 / 24);
alert ('Между двумя введенными датами прошло суток - ' + x); //*20
}
</script>
</head>
<body>
<span           style="width: 25em">Введите первую дату в формате ДД-ММ-ГГГГ: </span
><input id="d1" style="width: 15em">
<br><br>
<span           style="width: 25em">Введите вторую дату в формате ДД-ММ-ГГГГ: </span
><input id="d2" style="width: 15em">
<br><br>
<input style="width: 15em; margin-left: 25em"
type="button" value="Вычислить" onclick="ComeOn ()">
</body>
</html>
*1 после загрузки страницы помещаем курсор в поле ввода первой даты
*2 функция проверки правильности ввода и вычисления результата ComeOn ()
*3 проверка правильности ввода дат в оба поля (j = 1 и j = 2)
*4 запоминаем значение, введенное в j-ое поле
*5 проверяем значение j-го поля на формат (по маске) и на "непустоту"
*6 если значение j-го поля "пустое" или введено не в нужном формате, то со-
общаем об этом в алерте и выходим из функции, "пометив" неверное поле
*7 если значение j-го поле соответствует формату, проверяем введен-
ную дату на существование (количество дней в месяце с учетом високосности)
*8 массив количества дней в месяцах по формуле 28+х (для февраля используем 28+1)
*9 из значения j-го поля получаем массив из 3-х элементов (день, месяц, год), пере-
водим их в численный вид и отнимаем от месяца единицу
*10 результат проверки даты на существование изначально выставляем как СУЩЕСТВУЕТ
*11 если введен 0-ой год, то НЕ СУЩЕСТВУЕТ
*12 если день равен нулю или больше максимального числа дней в месяце, то НЕ СУЩЕСТВУЕТ
*13 если номер месяца меньше нуля или большее 11-ти, то НЕ СУЩЕСТВУЕТ
*14 определяем, високосный ли год введен ("кратен 4, при этом не кратен 100, либо кратен 400")
*15 если введено "29 февраля" при невисокосном годе, то НЕ СУЩЕСТВУЕТ
*16 если проверка j-го поля на существование введенной даты даст НЕ СУЩЕСТВУЕТ, то со-
общаем об этом в алерте и выходим из функции, "пометив" неверное поле
*17 при ВЕРНО запоминаем день, (месяц - 1), год j-го поля
*18 создаем объект Date ()
*19 устанавливаем время, соответствующее введенному в j-ое поле и запоминаем его в миллисекундах
*20 вычисляем модуль разности дат в сутках, округляя до меньшего целого и выводим результат
---------------------------

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

Ибо:
1. Вполне можно сказать, что между 01.03.2007 и 01.03.2008 прошел "ровно один год".

2. Также можно сказать, что между 28.02.2007 и 28.02.2008 тоже прошел "ровно один год"

3. А сколько тогда прошло между 28.02.2007 и 29.02.2008?
Тоже "ровно один год"? Или всё же "один год и один день"?
А между 28.02.2005 и 29.02.2008? "Три года и один день"? Или же "три года ровно"?
А между 25.02.2005 и 01.03.2008? "Три года и четыре дня"? Или же "три года и пять дней"?

Когда ответите (сами или ваш преподаватель) В ОБЩЕМ ВИДЕ на вопросы пункта 3, тогда смогу помочь с расчетом.

   
 
 автор: studentPO   (24.05.2008 в 12:55)   письмо автору
 
   для: PAT   (23.05.2008 в 22:57)
 

уж извините уважаемый РАТ, но мне эта вещь с датами вообще не понятна.

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

   
 
 автор: PAT   (23.05.2008 в 22:57)   письмо автору
 
   для: StudentPO   (23.05.2008 в 19:22)
 

То, что "двоечник" - это понятно.
Но вот то, что неумеющий читать является студентом - это выше моего понимания.

Цитирую сам себя: "способ вычленения не прописываю, ибо не знаю - в каком именно виде у вас будут вводиться данные в поля - кто-то пишет 23.02.08, кто-то 23.2.2008, можно писать 23-02-2008 или 23/II 2008 и так далее"

Студент-двоечник, НИЧЕГО не написав о том, в КАКОМ ИМЕННО ВИДЕ в полях будут прописаны даты, все-равно спрашивает: "как получить из поля эти три значения?"

Берите лопату, идите в поле и выкапывайте... все три значения...

   
 
 автор: StudentPO   (23.05.2008 в 19:22)   письмо автору
 
   для: PAT   (23.05.2008 в 18:23)
 

спасибо, это уже кое что.
Подскажите, пожалуйста, студенту-двоечнику как получить из поля эти три значения?

mD = 23;
mM = 1; //январь - 0-й месяц, февраль - 1-й месяц, март - 2-й,.. декабрь - 11-й месяц.
mY = 2008;

   
 
 автор: PAT   (23.05.2008 в 18:23)   письмо автору
 
   для: studentpo   (23.05.2008 в 17:28)
 

1. Из введенных в поля даты надо КАКИМ-ТО ОБРАЗОМ вычленить год, месяц и день в числовом формате (способ вычленения не прописываю, ибо не знаю - в каком именно виде у вас будут вводиться данные в поля - кто-то пишет 23.02.08, кто-то 23.2.2008, можно писать 23-02-2008 или 23/II 2008 и так далее).

Например, если в первое поле введено в каком-то виде 23 февраля 2008 года, то надо получить три численных значения:
mD = 23;
mM = 1; //январь - 0-й месяц, февраль - 1-й месяц, март - 2-й,.. декабрь - 11-й месяц.
mY = 2008;
и затем установить эти параметры для объекта Date ():
var d = new Date ();
d.setDate (mD);
d.setMonth (mM);
d.setYear (mY);

после чего надо запомнить численное значение установленной первой даты:
var time1 = d.valueOf ();


2. Проделать аналогичное для значения второго поля и запомнить time2

3. Затем надо вычислить разность time1 - time2 и взять модуль полученного числа. Это и будет промежуток времени в миллисекундах.
Делим результат на 1000 - получим в секундах.
Далее делим на 60 - получим в минутах.
Еще раз на 60 - получим в часах.
Потом на 24 - получим в сутках.
А если ещё на 7 - в неделях...

   
 
 автор: studentpo   (23.05.2008 в 17:28)   письмо автору
 
 

есть 2 поля куда вводятся даты. необходимо расчитать сколько лет, месяцев и дней между этими датами. Подскажите скрипт пожалуйста

   

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования