Odmierzanie liczby dni do określonej daty
Często chcemy by nasza strona pokazywała ilość dni do określonego wydarzenia (urodzin, końca promocji, zaćmienia słońca, zaćmienia księżyca, 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ł:
-
Na początku opisuje funkcję w języku PHP zwracającą liczbę pozostałych dni do określonej daty.
Tę funkcję możesz skopiować i wkleić do własnego programu i wykorzystywać dowolnie.
-
Pokazuje sposób wykorzystania opisanej funkcji.
-
Na końcu dokumentu znajdziesz pełną, przykładową stronę www wraz z kodem PHP odmierzającym dokładny czas do końca pełnego zaćmienia słońca 2 sierpnia 2027 roku.
Strona ta wykorzystuje wcześniej napisaną funkcję.
Możesz tą stronę wkleić do swojego serwisu, testować, zmieniać, dostosować do swoich potrzeb.
Opis funkcji ZwrocLiczbeDniDoWydarzenia
Co robi funkcja ZwrocLiczbeDniDoWydarzenia
Kluczem naszego programu jest funkcja PHP
ZwrocLiczbeDniDoWydarzenia zadeklarowana jak poniżej:
function ZwrocLiczbeDniDoWydarzenia ($data_wydarzenia) {
}
Jej argumentem jest string (tekst) zawierający datę wydarzenia (
$data_wydarzenia) w formacie jak poniżej:
'Rok-Miesiąc-Dzień'
na przykład
$data_wydarzenia może mieć wartość:
'2027-08-02'
co oznacza 2 sierpnia 2027 roku (nastąpi wówczas całkowite zaćmienie słońca).
Funkcja
ZwrocLiczbeDniDoWydarzenia zwraca nam liczbę dni jaka pozostała do wydarzenia zawartego w zmiennej
$data_wydarzenia na przykład:
5852
co oznacza, że do daty zawartej w zmiennej
$data_wydarzenia pozostało 5852 dni.
Data aktualna
Najpierw tworzona przez nas funkcja
ZwrocLiczbeDniDoWydarzenia 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");
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)
Wszystko fajnie, tylko my potrzebujemy nie dwie daty a różnicę w dniach 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 dniach
Doba (dzień) to 24 godziny * 60 minut * 60 sekund co zapamiętamy w zmiennej
$liczba_sekund_w_dniu. Zatem różnice między datami
$liczba_sekund_miedzy_datami musimy podzielić przez
$liczba_sekund_w_dniu by mieć liczbę dni między datami. Gdyby pojawił się ułamek w wyniku to funkcja PHP
Floor dodatkowo zaokrągla nam otrzymaną liczbę dni do dołu. Zatem wyświetli się nam informacja, że do zaćmienia słońca pozostało 5852 dni zamiast 5852,72 dni.
$liczba_sekund_w_dniu = 60 * 60 * 24;
$liczba_dni_miedzy_datami =
Floor ($liczba_sekund_miedzy_datami/$liczba_sekund_w_dniu);
Zwracamy liczbę dni
Teraz wystarczy obliczoną liczbę dni zwrócić do funkcji nadrzędnej:
return $liczba_dni_miedzy_datami;
Jak wykorzystać funkcję ZwrocLiczbeDniDoWydarzenia?
My sami musimy wiedzieć po co nam jest potrzebna liczba dni do określonej daty. Jeśli datą naszego wydarzenia jest pełne zaćmienie słońca które nastąpi 2 sierpnia 2027 roku to możemy po prostu wyświetlić informację ile dni pozostało do zaćmienia. Liczbę dni miedzy dziś a 2 sierpnia 2027 roku obliczy nam oczywiście funkcja
ZwrocLiczbeDniDoWydarzenia:
$data_wydarzenia = '2027-08-02';
$liczba_dni_do_wydarzenia =
ZwrocLiczbeDniDoWydarzenia ($data_wydarzenia);
if ($liczba_dni_do_wydarzenia == -1)
echo 'Niestety, całkowite zaćmienie słońca 2
sierpnia 2027 roku już miało miejsce...<br />';
else
echo 'Całkowite zaćmienie słońca będzie 2 sierpnia 2027 roku.
Pozostało już tylko ' . $liczba_dni_do_wydarzenia
. ' dni!<br />';
Jeśli funkcja
ZwrocLiczbeDniDoWydarzenia zwraca -1 to znaczy, że zaćmienie już nastąpiło, czyli, że dzisiejsza data jest późniejsza niż 2 sierpnia 2027 i wyświetlamy stosowny komunikat.
Plik z kodem programu
Wyżej omówiony program możesz pobrać tu jako gotowy
plik php. Obrazuje wykorzystanie funkcji
ZwrocLiczbeDniDoWydarzenia czyli wyświetla liczbę dni jaka pozostała do określonej daty (2 sierpnia 2027 - pełne zaćmienie słońca). 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 2 sierpnia 2027 roku.
Cały kod programu
Poniżej pokazno powyższy kod strony www, która wyświetla tylko jedna linię: liczbę dni jako pozostała do 2 sierpnia 2027 roku kiedy nastąpi całkowite zaćmienie słońca (lub informacje, że zaćmienie słońca już nastąpiło). 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 = '2027-08-02';
$liczba_dni_do_wydarzenia =
ZwrocLiczbeDniDoWydarzenia ($data_wydarzenia);
if ($liczba_dni_do_wydarzenia == -1)
echo 'Niestety, całkowite zaćmienie słońca 2 sierpnia 2027 roku
już miało miejsce...<br />';
else
echo 'Całkowite zaćmienie słońca będzie 2 sierpnia 2027 roku.
Pozostało już tylko <strong>' .
$liczba_dni_do_wydarzenia . '</strong> dni!<br />';
//////////////////////////////////////////////////////////////////////
/////// Funkcja ZwrocLiczbeDniDoWydarzenia ($data_wydarzenia) ///////
//Funkcja zwraca liczbe (zaokraglona do dolu) okreslajaca ile dni
//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ń
//na przykład
// '2027-08-02'
//co oznacza
// 2 sierpnia 2027 roku
//Funkcja zwróci liczbę dni pozostałych do daty $data_wydarzenia,
//na przykład:
// 5852
//////////////////////////////////////////////////////////////////////
function ZwrocLiczbeDniDoWydarzenia ($data_wydarzenia) {
$data_aktualna = Date("Y-m-d");
$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_dniu = 60 * 60 * 24;
$liczba_dni_miedzy_datami =
Floor ($liczba_sekund_miedzy_datami/$liczba_sekund_w_dniu);
return $liczba_dni_miedzy_datami;
}
?>
</body>
</html>
Przykładowy efekt działania programu
Poniżej przykład działania naszego kodu wyświetlającego liczbę dni do zaćmienia słońca:
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-dni-do-okreslonej-daty/
na przykład w formie jak poniżej:
<a href="http://www.cauchy.pl/systemy/php-mysql/liczba-dni-do-okreslonej-daty/">Program i gotowa funkcja w języku PHP pokazująca ilość dni do określonej daty </a>