eT` Posted July 6, 2011 Report Share Posted July 6, 2011 (edited) Kā lai aprēķina divu datumu intervālu formātā - x dienas y stundas z minūtes 1. date("Y-m-d H:i:s"); 2. dati no DB tādā pašā formātā NANO hostings parāda ka datediff funkciju nedrīkst ( viņu PHP versija - 5.2.1.7, bet vajag laikam vismaz 5.3.0 ) $tagad = new DateTime(date("Y-m-d H:i:s")); $beigsies = new DateTime($carr["end_date"]); $interval = $tagad->diff($beigsies); echo $interval->format('%dd %hst %imin'); man nesanāca arī, kad abus pārvērtu strtotime ( neattēlo pareizi ) $s = strtotime(date("Y-m-d H:i:s")); $b = strtotime($carr["end_date"]); $interval = $b-$s; $laiks = date("j H i",$interval); Edited July 6, 2011 by eT` Quote Link to comment Share on other sites More sharing options...
zintis8789 Posted July 6, 2011 Report Share Posted July 6, 2011 (edited) Funkcija <? function difs($pirmais_laiks,$otrais_laiks){ $pirmais_laiks=strtotime($pirmais_laiks); $otrais_laiks=strtotime($otrais_laiks); $difs=$otrais_laiks-$pirmais_laiks; return $difs; } ?> Kods: <? $date = date('Y-d-m h:i:s'); $time = "2011-6-7 23:54:00"; $time = difs($time,$date); $links .= floor($time/60/60).":"; if (floor($time/60%60)<10){ $links .= "0"; } $links .= floor($time/60%60).":"; if (floor($time%60)<10){ $links .= "0"; } $links .= floor($time%60); echo $links; ?> Edited July 6, 2011 by zintis8789 Quote Link to comment Share on other sites More sharing options...
Faks Posted July 6, 2011 Report Share Posted July 6, 2011 (edited) personīgi es šo sķērsli pārvarēju druscin savadāka es liku iekša datubāze sākuma datumu un beigu tad vilku arā no db un ar if palīdzību liku baudit vai sakuma datums nav vienāds ar beigu un ja jā tad veikt noteikto darbību ja ne viņs katru dienu liek iekša datubāze jaunu datumu līdz sakuma un beigu datums ir veināds un veic kaut kādu norādīto darbību ! ceru ka noder vai līdz ;) Edited July 6, 2011 by Faks Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 6, 2011 Report Share Posted July 6, 2011 Pārēķini uz "timestamp" abus. Atņem. Rezultātu pārrēķini atpakaļ. P.S. DateTime::diff. Quote Link to comment Share on other sites More sharing options...
eT` Posted July 6, 2011 Author Report Share Posted July 6, 2011 (edited) personīgi es šo sķērsli pārvarēju druscin savadāka es liku iekša datubāze sākuma datumu un beigu tad vilku arā no db un ar if palīdzību liku baudit vai sakuma datums nav vienāds ar beigu un ja jā tad veikt noteikto darbību ja ne viņs katru dienu liek iekša datubāze jaunu datumu līdz sakuma un beigu datums ir veināds un veic kaut kādu norādīto darbību ! ceru ka noder vai līdz ;) man arī DB glabājas sākuma un beigu datums. es izvelku šādi WHERE end_date>NOW() Pārēķini uz "timestamp" abus. Atņem. Rezultātu pārrēķini atpakaļ. P.S. DateTime::diff. pamēģināšu ar timestamp. datediff neiet, to jau #1 rakstīju Edited July 6, 2011 by eT` Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 6, 2011 Report Share Posted July 6, 2011 Man slinkums lasīt, labāk rakstu... function date_difference($date_1, $date_2, $only_seconds = false) { $date_1 = is_int($date_1) ? $date_1 : strtotime($date_1); $date_2 = is_int($date_2) ? $date_2 : strtotime($date_2); if ($date_1 === $date_2) { $difference = 0; } else if ($date_1 > $date_2) { $difference = $date_1 - $date_2; } else { // $date_1 < $date_2 $difference = $date_2 - $date_1; } if ($only_seconds === false) { $difference = array( 'years' => ceil($difference / (60 * 60 * 24 * 365)), 'months' => ceil($difference / (60 * 60 * 24 * 30)), 'weeks' => ceil($difference / (60 * 60 * 24 * 7)), 'days' => ceil($difference / (60 * 60 * 24)), 'hours' => ceil($difference / (60 * 60)), 'minutes' => ceil($difference / 60), 'seconds' => $difference ); } return $difference; } var_dump(date_difference(1425374671, 1437294303)); // Basic example. echo '<br />'; var_dump(date_difference(1437294303, 1425374671)); // Params just changed places! echo '<br />'; var_dump(date_difference(1324343221, 1324343221)); // Equal dates. echo '<br />'; var_dump(date_difference('2011-05-30 14:47:19', '2011-05-30 15:25:46')) ; // Time as string. This is format from database. echo '<br />'; var_dump(date_difference('2012-01-06 12:02:53', 1532654762)); // Date #1 as string, date #2 as timestamp. echo '<br />'; var_dump(date_difference(1532654762, '2012-01-06 12:02:53', true)); // Only seconds. Like short-hand. Apakšā ir piemēri. Es, ja godīgi, aizmirsu vispār, ko tev vajadzēja. Uztaisīju šito... ir vēls un tā. Bet kaut ko jau atgriež! Quote Link to comment Share on other sites More sharing options...
marrtins Posted July 7, 2011 Report Share Posted July 7, 2011 Noīsinam? >:)) Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 7, 2011 Report Share Posted July 7, 2011 Es pa nakti sapņoju, ka vajag "ceil" uz "floor". Sākumā varētu pielabot kļūdas... Quote Link to comment Share on other sites More sharing options...
eT` Posted July 7, 2011 Author Report Share Posted July 7, 2011 balstoties uz daGrevis funkciju uztaisīju funkciju, kas dara visu to ko man vajag. šo ir diezgan viegli pielabot, ja vajag lielākus intervālus par dienām. <?php function date_diff($date_1, $date_2) { $date_1 = is_int($date_1) ? $date_1 : strtotime($date_1); $date_2 = is_int($date_2) ? $date_2 : strtotime($date_2); if($date_1 === $date_2) $interval = 0; else if ($date_1 > $date_2) $interval = $date_1 - $date_2; else $interval = $date_2 - $date_1; $laika_sk = array(86400,3600,60); $apz = array('d','st','min'); for($i=0;$i<3;$i++) { $main = floor($interval/($laika_sk[$i])); if($main > 0) { $interval = $interval - ($main * $laika_sk[$i]); $laiks .= $main.$apz[$i].' '; } } return $laiks; } ?> Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 7, 2011 Report Share Posted July 7, 2011 Ouu, nice. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.