Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: обработка даты
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » обработка даты

Страниц (1): [1]
 

1. Вездеход - 10 Декабря, 2008 - 09:59:23 - перейти к сообщению
товарисчи. помогите плз )
есть поле в которое пользователь вбивает дату
вот как сделать так чтобы жаваскрипт сам обрабатывал это поле и если там ошибка - выдавал предупреждение
и желательно чтобы он строго требовал чтобы дата была в виде дд-мм-гггг
спасибою )

ps
в жаве вапще ваще не шарю )
2. Champion - 10 Декабря, 2008 - 10:14:58 - перейти к сообщению
chk_str = 'проверяемая дата'
delim = '.' // символ разделитель. 03.12.08 - разделитель - '.'
day_in_month[1] = 31
day_in_month[2] = 28
day_in_month[3] = 31
...
arr_date = chk_str.split(delim)
if (arr_date[2]от 0 до 99 или имеет длину 4 символа){
это корректный год
если он еще делится на 4 (високосный) day_in_month[2] = 29
}
else return false
if (arr_date[1] от 1 до 12)
...аналогично
if (arr_date[0] == day_in_month[ arr_date[0] ])
хорошо
else плохо
(Добавление)
А еще
if ('Invalid Date' == (date = new Date(chk_str)))
левая дата
3. Вездеход - 10 Декабря, 2008 - 10:33:10 - перейти к сообщению
а мона это оформить? а то я не знаю как...
Закатив глазки
4. Champion - 10 Декабря, 2008 - 10:53:09 - перейти к сообщению
<script>
function check_date(chk_str)
{все выше написанное, кроме первой строки
}
5. Вездеход - 10 Декабря, 2008 - 12:01:34 - перейти к сообщению
<script>
function check_date(chk_str)
{
chk_str = 'проверяемая дата'
delim = '.'
day_in_month[1] = 31
day_in_month[2] = 28
day_in_month[3] = 31
// сюда напишу количество дней в месяцах

arr_date = chk_str.split(delim)
if ((arr_date[2]>=0 and arr_date[2]<99) or (arr_date[2].lenght==4))
{
//это корректный год
//если он еще делится на 4 (високосный) day_in_month[2] = 29
// как тут писать я не знаю =(
}
else return false
if (arr_date[1] от 1 до 12)
//...аналогично
if (arr_date[0] == day_in_month[ arr_date[0] ])
///хорошо - а как это сделать? )
else {
// тоже самое =(
//плохо
}
</script>

у меня возникли вопросы касательно обработки - как это лучше сделать? как вывести сообщение об ошибке и т.д.
6. Champion - 10 Декабря, 2008 - 12:14:41 - перейти к сообщению
<script>
function check_date(chk_str)
{
этой строки нету здесь
delim = '.'
var day_in_month[1] = 31
var day_in_month[2] = 28
var day_in_month[3] = 31
// сюда напишу количество дней в месяцах

arr_date = chk_str.split(delim)
arr_date[1] = parseInt(arr_date[1])
arr_date[0] = parseInt(arr_date[0])
arr_date[2] = parseInt(arr_date[2])

if ((arr_date[2]>=0 and arr_date[2]<99) &&/*and*/ (arr_date[2].lenght==4))
{
//это корректный год
//если он еще делится на 4 (високосный) day_in_month[2] = 29
// как тут писать я не знаю =(
if ((arr_date[2] % 4) == 0) day_in_month[2] = 29
}
else return false
if (arr_date[1] от 1 до 12)
//...аналогично теперь у нас уже корректный и год, и месяц
if (arr_date[0] == day_in_month[ arr_date[0] ])
///хорошо - а как это сделать? )
return rtue
else {
return false
// тоже самое =(
//плохо
}
</script>
<input name=in_date><input type=button onclick = 'javascript:{if (check_date(document.in_date.value)) alert(document.in_date.value+"криво " ) ; esle alert(document.in_date.value+"некорректная дада " ) } '>
7. Вездеход - 10 Декабря, 2008 - 14:17:12 - перейти к сообщению
после обработки вот такой вот код у меня получился
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <script LANGUAGE="javascript">
  3. function check_date(chk_str)
  4. {
  5.         delim = '.';
  6.         var day_in_month = new Array('', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30');
  7.         arr_date = chk_str.split(delim);
  8.         arr_date[1] = parseInt(arr_date[1]);
  9.         arr_date[0] = parseInt(arr_date[0]);
  10.         arr_date[2] = parseInt(arr_date[2]);
  11.  
  12.         if ((arr_date[2]>0 && arr_date[2]<99) && (arr_date[2].lenght==4))
  13.         {
  14.                 if ((arr_date[2] % 4) == 0) { day_in_month[2] = 29; }
  15.                 return true;
  16.         } else {  return false; }
  17.         if (arr_date[1]>0 && arr_date[1]<12) { return true; } else { return false; }
  18.         if (arr_date[0] == day_in_month[arr_date[0]]) { return true; } else { return false; }
  19. }
  20. </script>
  21. <form name="my_form">
  22.  
  23. <input name="in_date" type="text">
  24. <input type="button" onclick="javascript:{if (check_date(document.in_date.value)) alert(document.in_date.value2+'криво') ; else alert(document.in_date3.value+'некорректная дата') } " value="go">
  25. </form>
  26.  


файрфокс вот так ругается:
Ошибка: document.in_date has no properties
Источник: http://localhost/
Строка: 1


в чем проблема я уже не понимаю - все что мог исправил....
8. Champion - 10 Декабря, 2008 - 14:36:46 - перейти к сообщению
тогда document.getElementByName
9. Вездеход - 10 Декабря, 2008 - 14:55:48 - перейти к сообщению
даже написав прям вот так в скрипте:

arr_date = document.getElementByName('in_date').split(delim);

файрфокс выдает ошибку:
Ошибка: window.getElementByName is not a function
Источник: http://localhost/
Строка: 6


пробовал по всякому - все равно на эту ошибку ругается
10. Champion - 10 Декабря, 2008 - 15:10:45 - перейти к сообщению
Сделаем так
<form name="my_form">

<input id=in_date name="in_date" type="text">
<input type="button" onclick="javascript:{if (check_date(document.getElementById('in_date' ).value))
alert('ok' ); else alert('криво' ) ; } " value="go">
</form>
(Добавление)
CODE (text):
скопировать код в буфер обмена
  1. if ((arr_date[2] % 4) == 0) { day_in_month[2] = 29; }
  2. return true;
  3. } else { return false; }
На этом ваш код в любом случае завершится, и корректной будет считаться любая дата, у которой корректны год и месяц. return true нужно сделать один раз в самом конце скрипта, а при обнаружении первой же некорректности выполнять куект false
11. Вездеход - 10 Декабря, 2008 - 16:09:36 - перейти к сообщению
понял. пайду тестить)
12. valenok - 10 Декабря, 2008 - 16:29:50 - перейти к сообщению
Может тебе к этому полю календарик присобачить ?
13. Вездеход - 10 Декабря, 2008 - 21:36:42 - перейти к сообщению
да я вот тоже так думал...
пока хачу сделать поле в которое мона писать дату определенного типа - дд.мм.гггг
но потом думаю добавлю и календарик туда для простоты использования. =)

 

Powered by ExBB FM 1.0 RC1