Osaako kukaan kertoa miten saan kahden päivämäärän välisen ajan selville, vaikka vuorokausissa. Päivämäärät muotoa yyyy-mm-dd.
PHP ja päivämäärät
pexi
2163
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 2
Vanhimmat
Muunna päivämäärät unix muotoon ja laske niiden erotus. Aikaeron saat sekunteina.
Ajan unix muoto: Kuluneet sekunnit 1.1.1970 klo 00:00.00 jälkeen. PHP:ssä taisi olla valmis funktio unix-muodon ja normaalimuodon väliselle muunnokselle, jollen ihan väärin muista.
Tässä päivämäärien käsittelyyn tarkoitettu luokka. Testasin SQL lauseen loppuosaan, ja hyvin pelitti.
Kaksi metodia:
-advanceday edistää kelloa halutun määrän päiviä (-miinus siirtää taaksepäin)
-daysbetween palauttaa paljonko päiviä välillä
Muuta tuo mktime haluamaasi formaattiin esim. siihen yyyy-mm-dd muotoon. Sekä myös 'konstruktorin' muotoin jos käytät sitä.
/*************************************************
------------------------------------------------
*
* Kellon funktiot - ei aito luokka --> tee...
*
-----------------------------------------------
*************************************************/
function kello()
{
$today = getdate();
$mon = $today['mon'];
$mday = $today['mday'];
$year = $today['year'];
$hours = $today['hours'];
$minutes = $today['minutes'];
$kellostr = sprintf ("d.d.M d:d",$mday, $mon, $year, $hours, $minutes);
return $kellostr;
}
function daysbetween($kel1, $kel2)
{
$mday1 = substr($kel1, 0, 2);
$mon1 = substr($kel1, 3, 2);
$year1 = substr($kel1, 6, 4);
$hours1 = substr($kel1, 11, 2);
$minutes1 = substr($kel1, 14, 2);
$mday2 = substr($kel2, 0, 2);
$mon2 = substr($kel2, 3, 2);
$year2= substr($kel2, 6, 4);
$hours2 =substr($kel2, 11, 2);
$minutes2 = substr($kel2, 14, 2);
$n2 = juliantojd($mon2,$mday2,$year2);
$n1 = juliantojd($mon1,$mday1,$year1);
return $n2-$n1;
}
function advanceday(&$kel, $i)
{
$mday = substr($kel, 0, 2);
$mon = substr($kel, 3, 2);
$year = substr($kel, 6, 4);
$hours = substr($kel, 11, 2);
$minutes = substr($kel, 14, 2);
$kel = date("d.m.Y H:i", mktime($hours,$minutes, 0,$mon,$mday $i,$year));
$mday = $mday;
return $kel;
}
?>
TESTAUS:
$kel1 = kello();
if($_REQUEST["hakuehto"] == 1)
{
$taaksekello = kello();
advanceday(&$taaksekello, -60);
$n0 = daysbetween($taaksekello, $kel1);
$hakuehdot = $hakuehdot . " AND TO_CHAR(pvm, 'yyyymmdd') > TO_CHAR(SYSDATE-$n0, 'yyyymmdd') AND TO_CHAR(pvm, 'yyyymmdd') < TO_CHAR(SYSDATE 1, 'yyyymmdd')";
$this->tulostusehto = 1;
}