ugrás a tartalomhoz

PHP idő vizsgálat

drext0r · 2011. Szep. 21. (Sze), 10.52
Lenne egy olyan problémám, hogy egy weboldalon vannak folyamatok amik meghatározott ideig tartanak és mindig kiszámolom az idő lejártát adatbázisba mentem, majd vizsgálom és ha lejárt az idő akkor lefut az else ág.
<?php
$time = date("H:i");

//adatbázisból kiszedett idő lejárata
$ido_vege

//majd megvizsgálom hogy a mostani idő kissebb e mint a lejárati idő

if($time < $ido_vege)
{
echo "nem telt le";

}
else
{
echo "letelt";
}
A probléma az lenne hogyha 10 óra után fut le ez a vizsgálat akkor szépen működik viszont ha pl: kilenc óra körül akkor már nem fut le és megáll ott hogy echo "nem telt le" még akkor is ha már rég eltelt az idő...

Mi lehet a problem ? Lehet az a problem hogy date("H:i") a H így menti le a dátumot 9:47 és akk mivel az óra egyjegyű vmiért nem jó az if vagy már nemtom mi lehet a gond.

A válaszokat előre is köszönöm! Remélem érthető.
 
1

$ido_vege = ?

Peete · 2011. Szep. 21. (Sze), 11.14
Az $ido_vege tartalmát milyen formában tárolod?
/szóval
echo $ido_vege;
mit ad? /

Különben: date("H") pl reggel azt adja, hogy: 08

én a helyedben H helyett G -t írnék; ez 24 órás formátum, nulla nélkül..

Az adatbázisból kiolvasott értéket is
"G"."i"
módon tartanám, ez most éppen "1111"-et ad, ha az aktuálisat is "G"."i"-ben kéred, úgy működik.


Szerk:
Nekem így működik:
<?php  
$ido_vege  = "1118"; //adatbázisból értéket így

$time = date("G"."i");  

if($time < $ido_vege)  {  
 echo "nem telt le";  
 }  
 else  
 {  
 echo "letelt";  
 }  
 ?>
2

ido

drext0r · 2011. Szep. 21. (Sze), 11.15
az $ido_vege az pl most 16:20 date("H:i") ugyanugy tárolom mint a $time-ot
de nem értem hogy mért nem működik 10 óra elött...
3

uhh

drext0r · 2011. Szep. 21. (Sze), 11.47
és az baj nálam hogyha van benne kettőspont ? 11:18 ?

ja és am meg 10 óra felett müxik nálm is ezt onnan tom hogy 9:30-kor észleltem a hibát egy csomót javitottam átnéztem mi lehet gond stb.. és 10 óra után meg tökéletesen működött ...
4

nem tudom..

Peete · 2011. Szep. 21. (Sze), 11.53
lehet, hogy az a hiba, csak nálam az eredeti verziód is működik /most néztem meg../

Próbáld ki! gondolom, localhoston teszteled; állítsd vissza az időt, és nézd meg, megy-e..
5

Azt ugye tudod, hogy itt nem

bb0072 · 2011. Szep. 21. (Sze), 12.09
Azt ugye tudod, hogy itt nem dátumok összehasonlítása történik, hanem stringeké?
Az a string, ami '9'-el kezdődik, az a relációban több, mint az, ami '1'-el kezdődik, márpedig 10 óra után a string '1'-el kezdődik. Próbálj meg számokat csinálni a dátumokból!
8

date("G"."i");

Peete · 2011. Szep. 21. (Sze), 12.23
date("G"."i"); számot ad.
12

date("H:i"); stringet ad

bb0072 · 2011. Szep. 21. (Sze), 16.16
date("H:i"); stringet ad
6

diff

solkprog · 2011. Szep. 21. (Sze), 12.14

$date1 = new DateTime("now");
$date2 = new DateTime("tomorrow");

var_dump($date1 == $date2);
var_dump($date1 < $date2);
var_dump($date1 > $date2);
PHP manual
7

Időzóna

janoszen · 2011. Szep. 21. (Sze), 12.15
Figyelj az időzóna beállításra!
9

értem

drext0r · 2011. Szep. 21. (Sze), 12.40
Értem köszönöm mindenkinek a válaszokat így már jó!
10

szétválasztás

drext0r · 2011. Szep. 21. (Sze), 14.15
Igen még annyi, hogy ki szeretném iratni az időpontot amikor lejár az idő és akkor most van egy ilyen számom pl 1856 hogy tudnám azt megcsinálni, hogy adatbázisból lekérdezve a 18 és az 56 közé berkajon egy kettőspontot ?
11

sokféle string-kezelő függvény áll a rendelkezésedre, pl..

Peete · 2011. Szep. 21. (Sze), 14.41
echo substr($ido_vege, 0, 2).":".substr($ido_vege, -2, 2);
13

:D

drext0r · 2011. Szep. 21. (Sze), 17.15
Tudom, hogy sokat kérdezek de ezzel kapcsolatban felmerült még egy probléma és szerintem már legelőször is ez volt a baj: tegyük fel hogy egy folyamat elindul 23:00-kor a folyamat 8 órás így a folyamat lejárta 7:00-kor van na de az a gond hogy ugye szokásosan vizsgálom :

<?php

$mostani_ido = 23:00;
$lejar_ido = 7:00;//persze ezt a felhasználó generálja a folyamat indításánál

if($mostani_ido < $lejar_ido)
{
echo "nem járt le";
}
else
{
echo "lejárt";
}



?>
na és láthatóan az a gond, hogy 23 sose lesz kissebb a 7-nél és ezért működött csak 10 óra után... ezt hogyan tudnám megoldani ??? próbáltam már ugyis valahogy hogy ellenörzöm a napot is de nem jött össze :(
14

Timestamp

Poetro · 2011. Szep. 21. (Sze), 18.05
Tárolj teljes időbélyeget. Ekkor összehasonlíthatod az aktuális időbélyeget a lejárat időbélyegével. Ha a lejárat kisebb, mint az aktuális, akkor mehet a folyamat.