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

HTML+CSS+JavaScript

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

 

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

вид форума:
Линейный форум Структурный форум

тема: JavaScript , сравнение двух дат
 
 автор: danga   (09.10.2013 в 14:23)   письмо автору
 
 

Здравствуйте, форумчане.
Не могу понять, в чем моя ошибка при использовании метода getTime(), который я пытаюсь использовать для сравнения двух дат. По идее getTime() превращает дату в целое число (милисекунды с 1970 до указанной дата), и можно сравнить две даты как целые числа. Но мой скрипт не работает, в том месте, где записаны строки сравнения ( если я эти проверки на сравнение убираю, то все ОК!)

<html>
<head>
<script type='text/javascript'>
function validate()
{

var minstart=document.forms["form"]["minstart"].value;
var maxstart=document.forms["form"]["maxstart"].value;
var today=new Date();


//Проверяем minstart
if (minstart.length==0){
alert("Ошибка:Начальная дата не введена");
return false;
}
if (minstart.getTime() < today.getTime()){
alert("Ошибка: Начальная дата не может быть меньше сегодняшнего дня");
return false;
}

else
alert(" MIN OK!");


//Проверяем maxstart
if (maxstart.length==0){
alert("Ошибка:Конечная дата не введена");
return false;
}
if (maxstart.getTime() < minstart.getTime()){
alert("Ошибка: Конечная дата не может быть меньше начальной даты");
return false;
}

else
alert(" MAX OK!");
}

</script>
</head>

<body>
<form name='form' method="post" onsubmit='return validate()'>
<input name="minstart" type="date">
<input name="maxstart" type="date">

<input type="submit" value="submit" >
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="reset" value="reset">
</form>
</body>
<html>

В чем проблема?

  Ответить  
 
 автор: confirm   (09.10.2013 в 15:45)   письмо автору
 
   для: danga   (09.10.2013 в 14:23)
 

getTime() получает число не с потолка, а у объекта Date(). Значение полей формы это строки. Можно ли из строки методом getTime() получить тоже время?

Обрамляйте свой код в тег, иначе читать его никто не будет.

  Ответить  
 
 автор: danga   (10.10.2013 в 18:23)   письмо автору
 
   для: confirm   (09.10.2013 в 15:45)
 

Уважаемй confirm. Если честно, я вообще не поняла, что вы сказали. Вот такая бестолковая. Короче, задача состоит в слудующем:
- получаем из HTML формы две даты: minstart и maxstart, которые в форме заданы как тип date.
- JavaScript проверяет правильность введенных данных:
-minstart не должно быть меньше даты сегодняшнего дня today
- maxstart не должно быть меньше minstart.

Я понимаю, что сделала не првильно, но не понимаю в чем ошибка и как сделать правильно

  Ответить  
 
 автор: confirm   (10.10.2013 в 18:47)   письмо автору
 
   для: danga   (10.10.2013 в 18:23)
 

Вот часть вашего кода:


//это вы получаете значение поля формы
//а тип значений полей типа теxt, 
//и даже полей number или date,
//которые есть в HTML5
//являются строкой

//то есть minstart - это просто строка текста
var minstart=document.forms["form"]["minstart"].value;
//а это объект с помощью которого можно оперировать датой и временем 
var today=new Date();
//обратившись к нему вы и получаете время  today.getTime()

//Проверяем minstart
//а что это такое - minstart.getTime()?
if (minstart.getTime() < today.getTime()) { 
//каким образом из строки полученной из формы вы можете получить время?


Если строка minstart является корректной строкой дата/время, то получить из нее время (getTime()) можно только создав объект, со временем из этой строки:
minstart = new Date(minstart);
//только после этого можно запросить время, как это вы делаете
minstart.getTime()


Читать надо, а не писать "по идее...." ).

  Ответить  
 
 автор: danga   (11.10.2013 в 17:23)   письмо автору
 
   для: confirm   (10.10.2013 в 18:47)
 

Спасибо еще раз, я так тоже пробовала, но у меня почему-то получилось.
Вобщем, я нашла другой способ, по-моему он лучше, потому что можно сравнивать все даты от Рождества Христова, а не только после 1970года. Идея состоит в том, чтобы все сравниваемые даты, как вводимые, так и сегодняшнюю, превратить в чило YYYYMMDD (например, 20131011).
и сравнивать эти числа. Дарю скрипт всем нуждающимся:
**************
<html>
<head>
<script type='text/javascript'>

function validate()
{

var minstart=document.forms["form"]["minstart"].value;
var maxstart=document.forms["form"]["maxstart"].value;
var today=new Date();

x=minstart.split("-");
dmin=x[0]*10000+x[1]*100+x[2]*1;

y=maxstart.split("-");
dmax=y[0]*10000+y[1]*100+y[2]*1;

z1=today.getDate();
z2=today.getMonth();
z3=today.getFullYear();
d0=z3*10000+(z2+1)*100+z1*1;


//Проверяем minstart
if (minstart.length==0){
alert("Ошибка:Начальная дата не введена");
return false;
}
if (dmin<d0){
alert("Ошибка:Начальная дата меньше сегодняшней");
return false;
}

else
alert(" MIN OK!");


//Проверяем maxstart
if (maxstart.length==0){
alert("Ошибка:Конечная дата не введена");
return false;
}
if (dmax<dmin){
alert("Ошибка:Конечная дата меньше начальной");
return false;
}

else
alert(" MAX OK!");

}

</script>
</head>

<body>
<form name='form' method="post" onsubmit='return validate()'>
<input name="minstart" type="date">
<input name="maxstart" type="date">

<input type="submit" value="submit" >
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="reset" value="reset">
</form>
</body>
</html>
*******************
Три дня мучилась, а оказалось все так просто:)))

  Ответить  
 
 автор: Allexia   (25.08.2014 в 12:25)   письмо автору
 
   для: danga   (11.10.2013 в 17:23)
 

Бедняжка, тебя наверное на цепи держат и заставляют писать такое?

  Ответить  
 
 автор: Enter   (28.08.2014 в 10:16)   письмо автору
 
   для: danga   (09.10.2013 в 14:23)
 

используй либу http://momentjs.com/.

  Ответить  
 
 автор: confirm   (28.08.2014 в 11:03)   письмо автору
 
   для: Enter   (28.08.2014 в 10:16)
 

Первое - эта тема давно уже устарела, второе - прикручивать "лабу" размером в 40 кило ради сравнения, и даже одноразового форматирования даты, это должно быть стыдно, ибо это говорит о том, что лень заглянуть в Javascript для ознакомления с объектом Date, с помощью которого можно решить эти мелкие вопросы без 40 лишних кило. Когда только до вас это дойдет, не понятно.

  Ответить  
Rambler's Top100
вверх

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