Главная страница


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     30 Dec 2001  16:30:53
 To : Simohin Alex
 Subject : Re: Проверка даты
 -------------------------------------------------------------------------------- 
 
 Simohin Alex wrote:
 
 > Как можно проверить правильность введенных дня, месяца и года перед
 > преобразованием в дату?
 А какие даты считать валидными? Если 32-разрядные POSIX.1
 (начинающиеся от 1 января 1970 и заканчивающиеся в январе 2038),
 то примерно так (месяцы нумеруются с нуля):
 
 sub is_valid_date {
      my ($day, $mon, $year) = @_;
      $year >= 1970 && $year <= 2037 or return;
 
     $mon >= 0 && $mon <= 11 or return;
 
      my $days =
          ($mon == 3 || $mon==5 || $mon == 8 || $mon == 10) ? 30 :
          $mon != 1 ? 31:
          $year%4 ? 28: 29;
      $day >= 1 && $day <= $days;
 }
 Для упрощения, маленький хвостик (18 последних дней POSIX.1 эпохи)
 считается невалидным (все равно пора будет уже задуматься о переделке :))
 Так же не всегда может быть валидным 1 января 1970. Зависит от времени
 и таймзоны. Hапример в час ночи 1 января 1970 года по Москве, по
 Гринвичу было еще 31 декабря 1969 года. Эта дата не конвертируется в
 POSIX.1. Если интересует проверка любой даты григорианского календаря,
 то нужно еще иметь в виду, что года кратные 100, но не кратные 400
 были не високосными, а 0 года не существовало. Hад високосностью
 лет до н.э. не задумывался...
 
 Андрей
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Проверка даты   Simohin Alex   29 Dec 2001 13:30:13 
 Re: Проверка даты   Andrey Sapozhnikov   30 Dec 2001 16:30:53 
 Проверка даты   George   07 Jan 2002 09:50:50 
 Re: Проверка даты   Artem Chuprina   09 Jan 2002 13:06:15 
 Re: Проверка даты   Artem Chuprina   09 Jan 2002 13:28:53 
 Re: Проверка даты   Boris R. Bondarchik   31 Dec 2001 17:05:42 
Архивное /ru.cgi.perl/52840acfa966.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional