Avatar billede shjorth Nybegynder
09. september 2008 - 15:38 Der er 11 kommentarer og
1 løsning

Nedtælling til tidspunkt (PHP)

Hejsa.

Jeg kører et cronjob kl 6:00 og kl 18:00.

Jeg ville gerne lave en nedtælling til dette så jeg kunne skrive:
Næste opdatering om 2 timer.

Altså en nedtælling til nærmeste cronjob..
Er der nogen der har nogle tips til hvordan man gør dette?

Mange tak
Avatar billede zynzz Praktikant
09. september 2008 - 16:52 #1
Utestet:
<?php
$TidCronjob = array("21600","64800"); // 6 timer og 18 timer (Mindst nederst)
$TidIdag = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
$TidNu = mktime(18, 6, 0, date("m"), date("d"), date("Y"));
$TidForskeld = $TidNu-$TidIdag;

for ($i = 0; $i <= count($TidCronjob)-1; $i++) {
if ($TidCronjob[$i] > $TidForskeld) {
$TidUdskriv = $TidCronjob[$i]-$TidForskeld;
$TidNaesteDag = 1;
echo "Næste opdatering: ".date('H:i:s', mktime(0,0,0,date("m"),date("d"),date("Y"))+$TidUdskriv);
}
}

// Hvis tiden er imorgen
if ($TidNaesteDag != 1) {
$TidImorgen = mktime(0, 0, 0, date("m"), date("d")+1, date("Y"))+$TidCronjob[0];
$TidUdskriv = $TidImorgen-$TidNu.".";
echo "Næste opdatering: ".date('H:i:s', mktime(0,0,0,date("m"),date("d")+1,date("Y"))+$TidUdskriv);
}

?>
Avatar billede shjorth Nybegynder
09. september 2008 - 17:00 #2
Efter at have testet får jeg:
Næste opdatering: 11:54:00

Det kan jo ikke helt passe :S
Avatar billede jakobdo Ekspert
09. september 2008 - 18:24 #3
Prøv at leg videre med denne kode:

<?php
$next_day = getdate(strtotime('+1 day'));
$next_job = mktime(6,0,0,$next_day['mon'],$next_day['mday'],$next_day['year']);
$now = time();

$diff = $next_job - $now;
echo "Sekunder til next job = " . ($diff % (60*60*12));
?>
Avatar billede shjorth Nybegynder
09. september 2008 - 18:40 #4
Den er tættere på, men den rammer vist ikke helt plet..

PHP time er: 18:39:36, og scriptet siger der er 11:34 til next job.
Det er en lille difference.. Hvordan kan det være?
Avatar billede shjorth Nybegynder
09. september 2008 - 18:41 #5
Ændrede i øvrigt til:
$job = ($diff % (60*60*12))/60/60
For at få det i timer :)
Avatar billede shjorth Nybegynder
09. september 2008 - 18:42 #6
Eller vent. Det er nok det der er fejlen.
Jeg har gjort sådan her:

$next_day = getdate(strtotime('+1 day'));
$next_job = mktime(6,0,0,$next_day['mon'],$next_day['mday'],$next_day['year']);
$now = time();

$diff = $next_job - $now;

$job = ($diff % (60*60*12))/60/60;

$test = explode(".",$job);

$timer = $test[0];

$min = substr($test[1],0,2);

print("Der er ".$timer." og ".$min." min til update<br>");

print date("H:i:s");
Avatar billede zynzz Praktikant
09. september 2008 - 18:49 #7
Prøv igen:
<?php
$TidCronjob = array("21600","64800"); // 6 timer og 18 timer (Mindst nederst)
$TidIdag = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
$TidNu = time();
$TidForskeld = $TidNu-$TidIdag;

for ($i = 0; $i <= count($TidCronjob)-1; $i++) {
if ($TidCronjob[$i] > $TidForskeld) {
$TidUdskriv = $TidCronjob[$i]-$TidForskeld;
$TidNaesteDag = 1;
echo "Næste opdatering: ".date('H:i:s', mktime(0,0,0,date("m"),date("d"),date("Y"))+$TidUdskriv);
}
}

// Hvis tiden er imorgen
if ($TidNaesteDag != 1) {
$TidImorgen = mktime(0, 0, 0, date("m"), date("d")+1, date("Y"))+$TidCronjob[0];
$TidUdskriv = $TidImorgen-$TidNu.".";
echo "Næste opdatering: ".date('H:i:s', mktime(0,0,0,date("m"),date("d")+1,date("Y"))+$TidUdskriv);
}

?>
Avatar billede shjorth Nybegynder
09. september 2008 - 18:51 #8
Nu viser den korrekt tid. Spørgsmålet er om den også gøre det imorgen kl 6.. Det må tiden vise.. Mange tak ihvertfald :)
Avatar billede jakobdo Ekspert
09. september 2008 - 21:08 #9
Min kode burde nu virke fint nok. :o)

Se koden her, med lidt bedre formattering af DIFF:

<?php
//http://www.eksperten.dk/spm/844794

$next_day = getdate(strtotime('+1 day'));
$next_job = mktime(6,0,0,$next_day['mon'],$next_day['mday'],$next_day['year']);
$now = time();

$diff = ($next_job - $now) % (60*60*12);

$hours = floor($diff / (3600));
$minutes = floor(($diff - ($hours * 3600)) / 60);
$seconds = $diff - (($hours * 3600) + ($minutes * 60));

echo 'Tid på serveren : ' . date('H:i:s') . '<br />';
echo 'Timer : ' . $hours . '<br />';
echo 'Minutter : ' . $minutes . '<br />';
echo 'Sekunder : ' . $seconds . '<br />';

?>
Avatar billede jakobdo Ekspert
09. september 2008 - 21:09 #10
Avatar billede jakobdo Ekspert
13. september 2008 - 10:17 #11
Fik du det til at virker eller ?
Avatar billede shjorth Nybegynder
12. juni 2010 - 20:54 #12
Lukker her, skriv endelig hvis i vil have point :P
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester