Functie pentru interval de timp in php

Salut,

Am de verificat daca o anumita ora se afla intr-un interval dat ( ex : 18:00 - 06:00 ). Am incercat folosirea functiilor mktime si strtotime dar nu imi dau seama cum as putea calcula contiitile pentru returnare true/false.

Multumesc

Care e input-ul tau? Ce date introduci si cum? Primesti direct intervalul orar ca string apoi ora tot ca string? In ce format?

2 Likes

ca sa functioneze, ai nevoie sa dai si o data
de exemplu pentru intervalul tau specificat 18:00 - 06:00
6 e mai mic ca 18 ca sa fie mai mare trebuie sa specifici ca e ora 6 a doua zi dimineata.
deci, daca bagi si o data calendaristica e simplu sa vezi daca o anumita data/ora se afla in intervalul specificat.

deci, cum ai intervalul si cum ai ora cautata?

Ai putea folosi DateInterval sau DateTime::diff

Alternativ, poți face așa:

  1. x[0] = unix time pentru ziua curentă, ora 18:00
  2. x[1] = unix time pentru ziua următoare, ora 06:00 (în cazul ăsta x[0] + 12)
  3. y = unix time pentru ora de verificat
return ( y >= x[0] && y <= x[1] );
3 Likes

Foarte usor:

$verific = "5:00";
$check = strtotime("0:00") < strtotime($verific) && strtotime($verific) < strtotime("6:00");

var_dump($check); // va returna bool(true)

Testeaza pe http://phptester.net/

Mai citeste intrebarea o data :smile:

Yep, greseala mea era ca verificam ora 6:00 tot in ziua curenta. Din moment ce 06:00 si 18:00 sunt in aceiasi zi as putea verifica daca ora mea nu se afla in intervalul asta si nu as mai fi nevoit sa calulez ora pentru ziua urmatoarea

Pai am citit de o gramada de ori intrebarea si inteleg acelasi lucru.
Asta am si facut in cod, am verificat daca o anumita ora (ex. 5:00) se afla intrun interval de timp (0:00 - 6:00) si a rezultat bool true.
Oricum daca ai rezolvat nu mai conteaza.

Solutia ta nu ia in calcul timezone-ul, ceea ce e pretty bad cand vorbim de calcule legate de timp.

Solutia propusa de @iamntz (cu DateTime) e cea mai eficienta, si asta e si rezolvarea:

$timezone = new DateTimeZone('Europe/Bucharest');

$start = new DateTime('2014-09-01 12:20', $timezone);
$end = new DateTime('2014-09-01 18:00', $timezone);

$to_check = new DateTime('2014-09-01 16:00', $timezone);

if ($start <= $to_check && $to_check <= $end) {
  echo "in interval";
} else {
  echo "nu e in interval";
}
3 Likes