Cauchy - Szkoła Myślenia www.cauchy.pl//systemy/php-mysql/liczba-godzin-do-okreslonej-daty/     |     Dodaj do ulubionych21 listopad 2018

Łamigłówki podstawowa

|

Przedszkolaki

|

Kolorowanki

|

Rebusy

|

Krzyżówki

|

Wykreślanki

|

Algorytmy

|

Zabawy



Poprzednie PoprzednieDo góry, menu nadrzędne, lista zadań Lista wszystkich tematówNastępne Następne

Wyświetlanie liczby godzin do określonej daty

Skrypty PHP, mySQL

Odmierzanie liczby godzin do określonej daty
Często chcemy by nasza strona pokazywała ilość godzin do określonego wydarzenia (urodzin, końca promocji, itp.). Poniższy artykuł pokazuje jak zrealizować ten cel korzystając z języka PHP oraz udostępnia Tobie gotową funkcję zwracającą liczbę dni do interesującego Cię wydarzenia.
Jak posługiwać się artykułem
Niniejszy artykuł:
  1. Na początku opisuje dwie funkcję w języku PHP:
    1. pierwszą zwracającą liczbę pozostałych dni do określonej daty.
    2. drugą obliczającą tekst odpowiednio definiujący słowo "godzin"
    Te funkcje możesz skopiować i wkleić do własnego programu i wykorzystywać dowolnie.
  2. Pokazuje sposób wykorzystania opisanych funkcji.
  3. Na końcu dokumentu znajdziesz pełną, przykładową stronę www wraz z kodem PHP odmierzającym dokładny czas do końca pewnej fikcyjnej promocji która trwa do godziny 20 minut 30 dnia 24 grudnia 2035 roku.
    Strona ta wykorzystuje wcześniej napisane funkcje.
    Możesz tą stronę wkleić do swojego serwisu, testować, zmieniać, dostosować do swoich potrzeb.
Opis funkcji ZwrocLiczbeGodzinDoWydarzenia
Co robi funkcja ZwrocLiczbeGodzinDoWydarzenia
Kluczem naszego programu jest funkcja PHP ZwrocLiczbeGodzinDoWydarzenia zadeklarowana jak poniżej:
 function ZwrocLiczbeGodzinDoWydarzenia ($data_wydarzenia) {
 }
 
Jej argumentem jest string (tekst) zawierający datę wydarzenia ($data_wydarzenia) w formacie jak poniżej:
      'Rok-Miesiąc-Dzień Godzina:Minuta'
na przykład $data_wydarzenia może mieć wartość:
      '2035-12-24 20:30'
co oznacza godzinę 20 minut 30 dnia 24 grudnia 2035 roku.
Funkcja ZwrocLiczbeGodzinDoWydarzenia zwraca nam liczbę godzin jaka pozostała do wydarzenia zawartego w zmiennej $data_wydarzenia na przykład:
      214020
co oznacza, że do daty zawartej w zmiennej $data_wydarzenia pozostało 214020 godzin.
Data aktualna
Najpierw tworzona przez nas funkcja ZwrocLiczbeGodzinDoWydarzenia potrzebuje pobrać aktualną datę. Funkcja PHP Date umożliwia pobrania daty w dowolnym formacie. My potrzebujemy format identyczny jak w dacie wydarzenia. Dlatego wywołujemy funkcję Date w sposób następujący:
 $data_aktualna = Date('Y-m-d H:i');
 
Oznacza to, że:
  • Rok, miesiąc i dzień będą oddzielone myślnikami (-)
  • Rok będzie wyświetlany w postaci 4 znaków (Y)
  • Miesiąc będzie wyświetlany w postaci 2 znaków (m)
  • Dzień będzie wyświetlany w postaci 2 znaków (d)
  • Po spacji będzie wyświetlana godzina jako 2 znaki w formacie 24 godzinnym (H)
  • Po dwukropku będzie wyświetlana minuta jako 2 znaki (i)
Jak obliczyć liczbę godzin między dwoma datami?
Wszystko fajnie, tylko my potrzebujemy nie dwie daty a różnicę w godzinach między dwiema datami.
Liczba sekund od 1 stycznia 1970 roku
Funkcja StrToTime oblicza ile minęło sekund od 1 stycznia 1970 roku. Nazwę tej funkcji można rozwinąć na Str To Time czyli Zamień String Na Czas. W ten sposób zamieniamy datę na liczbę sekund jaka upłynęła między datą a 1 stycznia 1970.
Dlatego teraz tworzymy dwie zmienne które obliczają ile sekund upłynęło od 1 stycznia 1970 roku dla obydwu naszych dat:
 $liczba_sekund_dla_wydarzenia = StrToTime($data_wydarzenia);
 $liczba_sekund_dla_aktualnej_daty = StrToTime($data_aktualna);
 
Różnica między datami w sekundach
Teraz wystarczy obliczyć różnicę miedzy zmiennymi $liczba_sekund_dla_wydarzenia oraz $liczba_sekund_dla_aktualnej_daty by mieć liczbę sekund jaka minęła między tymi datami:
 $liczba_sekund_miedzy_datami = 
      $liczba_sekund_dla_wydarzenia - $liczba_sekund_dla_aktualnej_daty;
 
Czy jest sens dalej liczyć?
Jeśli otrzymana zmienna $liczba_sekund_miedzy_datami jest ujemna to znaczy, że wydarzenie już nastąpiło. W tej sytuacji nie ma sensu dalej liczyć i zwracamy -1. Umawiamy się, że jeśli zwracamy -1 to oznacza, że aktualna data jest późniejsza niż data wydarzenia.
 if ($liczba_sekund_miedzy_datami<0)
       return -1;
 
Różnica między datami w godzinach
Godzina to 60 minut * sekund. Zapamiętamy tą wartość w zmiennej $liczba_sekund_w_godzinie. Zatem by mieć liczbę godzin między datami musimy podzielić liczbę sekund między datami ($liczba_sekund_miedzy_datami) przez zmienną $liczba_sekund_w_godzinie. Gdyby pojawił się ułamek w wyniku to funkcja PHP Floor dodatkowo zaokrągla nam otrzymaną liczbę godzin do dołu. Zatem wyświetli się nam informacja, że do końca promocji pozostało 214020 godzin zamiast 214020,649 godzin.
 $liczba_godzin_do_wydarzenia = 
       Floor ($liczba_sekund_miedzy_datami/$liczba_sekund_w_godzinie);
 
Zwracamy liczbę godzin
Teraz wystarczy obliczoną liczbę dni zwrócić do funkcji nadrzędnej:
 return $liczba_godzin_do_wydarzenia;
 
Jak wykorzystać funkcję ZwrocLiczbeGodzinDoWydarzenia?
Jeśli data naszego wydarzenia oznacza koniec promocji to możemy po prostu wyświetlić informację ile godzin pozostało do końca promocji. Liczbę godzin miedzy chwila obecną a godziną 20 minut 30 dnia 24 grudnia 2035 roku obliczy nam oczywiście funkcja ZwrocLiczbeGodzinDoWydarzenia:
 $data_wydarzenia = '2035-12-24 20:30';
 $liczba_godzin_do_wydarzenia = 
                       ZwrocLiczbeGodzinDoWydarzenia ($data_wydarzenia);
 
 if ($liczba_godzin_do_wydarzenia == -1)
       echo 'Niestety, promocja dobiegła końca. 
             Wkrótce pojawi się nowa!
'; else echo 'Do końca promocji pozostało już tylko <strong>' . $liczba_godzin_do_wydarzenia . '</strong> godzin!<br />';
Jeśli funkcja ZwrocLiczbeGodzinDoWydarzenia zwraca -1 to znaczy, że promocja dobiegła końca, czyli, że dzisiejsza data jest późniejsza niż godzina 20 minut 30 dnia 24 grudnia 2035 roku i wyświetlamy stosowny komunikat.
Kłopot z polska odmianą
Tylko, że powyższy kod ma pewien feler. Jeśli do wydarzenia pozostała godzina to komunikat w przeglądarce będzie wyglądał jak poniżej
 Do końca promocji pozostało już tylko 1 godzin!
 
i nie wygląda profesjonalnie. Fajnie gdyby nasz program potrafił odmieniać słowo godzina przez przypadki w zależności od tego ile godzin zostało do wydarzenia (u nas końca promocji).
Dlatego stworzymy specjalną funkcje PHP ZnajdzStringOpisujacyGodzine, która zwróci nam poprawne słowo: godzin lub godzina lub godziny w zależności od podanej zmiennej $liczba_godzin.
Funkcja ZnajdzStringOpisujacyGodzine
Jedynym argumentem tej funkcji powinna być liczba godzin, gdyż w zależności od liczby godzin funkcja ZnajdzStringOpisujacyGodzine powinna wypisać jedno ze słów:
  • godzina: gdy liczba godzin wynosi 1 godzinę
  • godziny: gdy liczba godzin kończy się na 2, 3, 4 – ale poza 12 , 13, 14
  • godzin: dla pozostałych przypadków liczby godzin oraz 12, 13, 14
Zatem definicja naszej funkcji będzie następująca:
 function ZnajdzStringOpisujacyGodzine($liczba_godzin) {
 }
 
Zamieniamy zmienną $liczba_godzin na string
Najpierw musimy zamienić zmienną $liczba_godzin na string (typ znakowy). Jest to potrzebne gdyż integer (typ całkowitoliczbowy) jaki niejawnie ma zmienna $liczba_godzin nie pozwala nam traktować tej zmiennej jako tablicy (będzie o tym za chwilę).
Poniższa zmienna $liczba_godzin_string jest typu string i zawiera znaki liczby $liczba_godzin:
 $liczba_godzin_string = StrVal ($liczba_godzin);
 
Teraz mamy pewność, że zmienna $liczba_godzin_string jest typu string (znakowego).
Znajdujemy ostatnią cyfrę naszej liczby
Poniżej obliczamy liczbę cyfr w zmiennej $liczba_godzin_string:
 $liczba_cyfr = StrLen($liczba_godzin_string);
 
Teraz możemy obliczyć ostatnią cyfrę stringu $liczba_godzin_string traktując zmienną $liczba_godzin_string jak tablicę. Ponieważ pierwszy element taj tablicy ma indeks (numer) 0, dlatego ostatni element tej tablicy (czyli ostatnia cyfra jedności) będzie mieć indeks $liczba_cyfr - 1:
 $ostatnia_cyfra = $liczba_godzin_string[$liczba_cyfr-1];
 
Powyższej operacji nie moglibyśmy wykonać na zmiennej $liczba_godzin, gdyż jest ona typu liczbowego (integer) mimo, że formalnie w PHP nie deklarujemy typów danych.
Mamy wszystko
Mamy wszystko co potrzebujemy by zwrócić odpowiednie słowo określające liczbę godzin:
  • liczbę cyfr w liczbie godzin ($ilość znaków)
  • ostatnią cyfrę ($ostatnia_cyfra)
Zwracamy odpowiednie słowo określające liczbę godzin
Jeśli liczba godzin jest większa od 4 i nie większa od 20 to na pewno określamy liczbę godzin dodają słowo godzin:
 if ( ($liczba_godzin>=5) && ($liczba_godzin<=20) )
    return "godzin";
 
Jeśli liczba godzin wynosi 1 to mówimy jedna godzina:
 if ( $liczba_godzin==1 )
    return "godzina";
 
Jeśli ostatnia cyfra jest miedzy 2 lub 3 lub 4 (ale nie 12, 13, 14 co wykluczyliśmy w pierwszym przypadku) to dodajemy słowo godziny:
 if ( ($ostatnia_cyfra>=2) && ($ostatnia_cyfra<=4) )
    return "godziny";
 
W pozostałych przypadkach zwracamy słowo godzin:
 return "godzin";
 
Co kończy naszą funkcję zwracającą odpowiednie słowo określające liczbę godzin.
Wyświetlamy komunikat z poprawną odmianą słowa godzina
Teraz możemy wykorzystać nasze funkcje ZwrocLiczbeGodzinDoWydarzenia oraz ZnajdzStringOpisujacyGodzine by poprawnie wyświetlić komunikat o promocji:
 $data_wydarzenia = '2035-12-24 20:30';
 $liczba_godzin_do_wydarzenia = 
            ZwrocLiczbeGodzinDoWydarzenia ($data_wydarzenia);
 $string_opisujacy_godzine = 
            ZnajdzStringOpisujacyGodzine($liczba_godzin_do_wydarzenia);
 
 if ($liczba_godzin_do_wydarzenia == -1)
    echo 'Niestety, promocja dobiegła końca. 
          Wkrótce pojawi się nowa!<br />';
 else
    echo 'Do końca promocji pozostało już tylko <strong>' . 
      $liczba_godzin_do_wydarzenia . '</strong> ' . 
      $string_opisujacy_godzine . '!<br />';
 
Obliczona w funkcji ZwrocLiczbeGodzinDoWydarzenia liczba godzin do godziny 20 minut 30 dnia 24 grudnia 2035 roku jest zapamiętana w zmiennej $liczba_godzin_do_wydarzenia. Dla tej wartości jest obliczona poprawna odmiana słowa godzina przez funkcję ZnajdzStringOpisujacyGodzine. Teraz już wystarczy wyświetlić stosowny komunikat dla dwóch przypadków:
  1. Gdy promocja dobiegła końca
  2. Gdy promocja trwa
Plik z kodem programu
Wyżej omówiony program możesz pobrać poniżej jako gotowy plik php. Obrazuje wykorzystanie funkcji ZwrocLiczbeGodzinDoWydarzenia czyli wyświetla liczbę dni jaka pozostała do określonej daty (godzina 20 minut 30 dnia 24 grudnia 2035 roku - koniec naszej fikcyjnej promocji). Jest to strona www (spakowana programem zip) gotowa do umieszczenia w serwisie www - na przykład celem testów, mydyfikacji, przystosowania do swoich potrzeb. Powyższy plik wystarczy rozpakować i jako plik PHP umieścić w serwisie wwww. Program od razu będzie wyświetlał pozostałą liczbę dni do godziny 20 minut 30 dnia 24 grudnia 2035 roku .
Cały kod programu
Powyższy kod strony www która wyświetla tylko jedna linię: liczbę dni jako pozostała do godziny 20 minut 30 dnia 24 grudnia 2035 roku czyli końca naszej fikcyjnej promocji (lub informacje, że promocja dobiegła końca) został także pokazany poniżej. Oto pełna strona www:
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <html>
 <head>
 <title>Serwis ABC</title>
 <meta http-equiv=content-type content="text/html; charset=iso-8859-2">
 <meta http-equiv="Content-Language" content="pl">
 </head>
 
 <body>
 
 <?php 
 $data_wydarzenia = '2035-12-24 20:30';
 $liczba_godzin_do_wydarzenia = 
             ZwrocLiczbeGodzinDoWydarzenia ($data_wydarzenia);
 $string_opisujacy_godzine = 
             ZnajdzStringOpisujacyGodzine($liczba_godzin_do_wydarzenia);
 
 if ($liczba_godzin_do_wydarzenia == -1)
    echo 'Niestety, promocja dobiegła końca. 
          Wkrótce pojawi się nowa!<br />';
 else
    echo 'Do końca promocji pozostało już tylko <strong>' . 
          $liczba_godzin_do_wydarzenia . '</strong> ' . 
          $string_opisujacy_godzine . '!<br />';
 
 
 //////////////////////////////////////////////////////////////////////
 ////// Funkcja ZwrocLiczbeGodzinDoWydarzenia ($data_wydarzenia) //////
 //Funkcja zwraca liczbe (zaokraglona do dolu) okreslajaca ile  godzin
 //pozostalo do okreslonego wydarzenia zawartego w zmiennej 
 //$data_wydarzenia
 //Jesli $data_wydarzenia jest wczesniejsza niż data aktualna to fukcja
 //zwraca -1
 //Argument $data_wydarzenia powinie byc postaci:
 //        ‘Rok-Miesiąc-Dzień Godzina:Minuta’
 //na przykład
 //        '2035-12-24 20:30'
 //co oznacza
 //        godzinę 20 minut 30 dnia 24 grudnia 2035 roku 
 //Funkcja zwróci liczbę godzin pozostałych do daty $data_wydarzenia, 
 //na przykład:
 //   214020
 //////////////////////////////////////////////////////////////////////
 function ZwrocLiczbeGodzinDoWydarzenia ($data_wydarzenia) {
    $data_aktualna = Date('Y-m-d H:i');
 
    $liczba_sekund_dla_wydarzenia = StrToTime($data_wydarzenia);
    $liczba_sekund_dla_aktualnej_daty = StrToTime($data_aktualna);
 
    $liczba_sekund_miedzy_datami = 
      $liczba_sekund_dla_wydarzenia - $liczba_sekund_dla_aktualnej_daty;
    if ($liczba_sekund_miedzy_datami<0)
       return -1;
 
    $liczba_sekund_w_godzinie = 60 * 60;
    $liczba_godzin_do_wydarzenia = 
         Floor ($liczba_sekund_miedzy_datami/$liczba_sekund_w_godzinie);
 
    return $liczba_godzin_do_wydarzenia;
 }
 
 //////////////////////////////////////////////////////////////////////
 ////// Funkcja ZnajdzStringOpisujacyGodzine($liczba_godzin) //////
 //Funkcja zwraca odpowiedni string (tekst) poprawnie odmieniajacy slowo 
 //godzin w zależności od liczby zawartej w zmiennej $liczba_godzin
 //Przyklady:
 //Jeśli $liczba_godzin wynosi 7 to fukcja zwróci słowo godzin
 //Jeśli $liczba_godzin wynosi 1 to fukcja zwróci słowo godzina
 //Jeśli $liczba_godzin wynosi 3 to fukcja zwróci słowo godziny
 //////////////////////////////////////////////////////////////////////
 function ZnajdzStringOpisujacyGodzine($liczba_godzin) {
    $liczba_godzin_string = StrVal ($liczba_godzin);
    $liczba_cyfr = StrLen($liczba_godzin_string);
    $ostatnia_cyfra = $liczba_godzin_string[$liczba_cyfr-1];
 
    if ( ($liczba_godzin>=5) && ($liczba_godzin<=20) )
       return "godzin";
    if ( $liczba_godzin==1 )
       return "godzina";
    if ( ($ostatnia_cyfra>=2) && ($ostatnia_cyfra<=4) )
       return "godziny";
 
    return "godzin";
 }
 
 ?>
 
 </body> 
 </html>
 
 
Przykładowy efekt działania programu
Poniżej przykład działania naszego kodu wyświetlającego liczbę godzin do końca promocji:
Wyświetlanie liczby godzin do określonej daty (Wydarzenia) w serwisie www przy pomocy PHP.
Używaj kodu dowolnie
Kod zawarty w tym artykule możesz wykorzystywać dowolnie, bez żadnych zastrzeżeń. Jedyna prośba to umieszczenie linku do niniejszej strony: http://www.cauchy.pl/systemy/php-mysql/liczba-godzin-do-okreslonej-daty/ na przykład w formie jak poniżej: <a href="http://www.cauchy.pl/systemy/php-mysql/liczba-godzin-do-okreslonej-daty/">Program i gotowa funkcja w języku PHP obliczająca ilość godzin do określonego wydarzenia</a>

PoprzednieDo góry, menu nadrzędne, lista zadańNastępne
PoprzednieLista wszystkich tematówNastępne


Nie znalazłeś szukanej treści?
Poszperaj w serwisie cauchy.pl lub w sieci.
Google
 
Korepetycje, korepetycje z języka polskiego
 
Kurs przygotowujący do konkursów matematycznych w szkole podstawowej
 
Internetowe kursy maturalne z matematyki
 
Dziecięce zabawy i gry, edukacyjne zagadki dla maluchów: przedszkolaków, uczniów szkół podstawowych
 
(C) 2010 Szkoła Myślenia im. A. L. Cauchy        Napisz Napisz        Praca     Reklama
   korepetycje z fizyki