Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> jak sprawdzić czy format daty jest poprawny i czy data jest dzisiejsza lub późniejsza
nieraczek
post 27.11.2008, 20:36:03
Post #1





Grupa: Zarejestrowani
Postów: 405
Pomógł: 6
Dołączył: 12.01.2007

Ostrzeżenie: (0%)
-----


Da się zrobić za pomocą wyrażeń regularnych sprawdzanie poprawności daty ? Data powinna być w formacie: YYYY-MM-DD

Ja zrobiłem coś takiego:
  1. <?php
  2. function  poprawnadata($data)
  3. {
  4. if (!preg_match('/^[0-9]{4}+-[0-9]{2}+-[0-9]{2}$/', $data))
  5. {
  6.  return false;
  7. }
  8. return true;
  9. }
  10. ?>


Tylko, że wg tego data np. 2000-11-99 jest poprawna, a przecież żaden miesiąc nie ma '99' dni biggrin.gif Da radę to jakoś inaczej zapisać żeby data była kontrolowana bardziej poprawnie ?

I drugie pytanie - jak zrobić by była akceptowana tylko data późniejsza niż aktualna data lub aktualna data, żeby ktoś nie wpisał daty z przeszłości ?
Go to the top of the page
+Quote Post
magra
post 27.11.2008, 20:43:06
Post #2





Grupa: Zarejestrowani
Postów: 34
Pomógł: 8
Dołączył: 5.10.2004

Ostrzeżenie: (0%)
-----


1.
http://pl2.php.net/manual/en/function.checkdate.php

2.
  1. <?php
  2. if(strtotime($_GET['date']) - time() < 0)
  3. {
  4.    #data przeszła
  5. } else {
  6.    #data przyszła
  7. }
  8. ?>


--------------------
www.internetum.pl
Go to the top of the page
+Quote Post
nieraczek
post 27.11.2008, 22:16:01
Post #3





Grupa: Zarejestrowani
Postów: 405
Pomógł: 6
Dołączył: 12.01.2007

Ostrzeżenie: (0%)
-----


Dzięki za linka odnośnie 1. pytania i podsunięcie pomysłu odnośnie drugiego pytania smile.gif - chociaż odnośnie drugiej sprawy to ten kod nie do końca mi działa, bo zdaje się time() i strtotime() zwracają czas w sekundach od 1970 roku więc nawet jak daty są takie same to jednak według tego różne - różnią się sekundami. Ja więc zrobiłem tak - w jednej funkcji sprawdzenie czy data jest postaci YYYY-MM-DD i czy nie jest przeszła (sama funkcja checkdate() mi nie wystarczyła, bo wg niej data 2008-12-1 jest poprawna, a mi potrzebny był dzień składający się z dwóch cyfr a nie z jednej itd. więc musiał dodać pare kwestii) - wklejam kod może się komuś przyda:

  1. <?php
  2. function  poprawnadata($data)
  3. {
  4.    if (!preg_match('/^[0-9]{4}+-[0-9]{2}+-[0-9]{2}$/', $data))
  5.    {
  6.         return false;
  7.    }
  8.  
  9.    if ($data=="" || strlen($data)!=10)
  10.    {
  11.        return false;
  12.    }
  13.  
  14.    list($yy,$mm,$dd) = explode("-", $data);
  15.    
  16.    
  17.    if (is_numeric($yy) && is_numeric($mm) && is_numeric($dd) && $yy!="" && $mm!="" && $dd!="")
  18.    {    
  19.         if(!checkdate($mm, $dd, $yy)) return false;
  20.         else //sprawdzenie czy nie wpisano daty przeszlej
  21.         {
  22.            $dzisiaj = date("Y-m-d");
  23.            if($dzisiaj>$data) return false;
  24.            else return true;
  25.         }
  26.    }
  27.    else return false;
  28. }
  29. ?>


Ten post edytował nieraczek 27.11.2008, 22:17:36
Go to the top of the page
+Quote Post
magra
post 28.11.2008, 08:37:27
Post #4





Grupa: Zarejestrowani
Postów: 34
Pomógł: 8
Dołączył: 5.10.2004

Ostrzeżenie: (0%)
-----


Cytat(nieraczek @ 27.11.2008, 22:16:01 ) *
Dzięki za linka odnośnie 1. pytania i podsunięcie pomysłu odnośnie drugiego pytania smile.gif - chociaż odnośnie drugiej sprawy to ten kod nie do końca mi działa, bo zdaje się time() i strtotime() zwracają czas w sekundach od 1970 roku więc nawet jak daty są takie same to jednak według tego różne - różnią się sekundami.


  1. <?php
  2. if(strtotime($_GET['date']) - mktime(0,0,0,date('m'),date('d'),date('Y')) < 0)
  3. {
  4.   #data przeszła
  5. } else {
  6.   #data przyszła
  7. }
  8. ?>


--------------------
www.internetum.pl
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.05.2025 - 10:54