Avatar billede coolzone Nybegynder
01. oktober 2004 - 21:56 Der er 18 kommentarer og
1 løsning

PHP tid manipulation

Hej alle!

Jeg har denne PHP kode:

SELECT *, time_format(Daggry, '%H:%i') AS Daggry FROM tider WHERE dato='$dato'

Bagefter udskrives resultatet med:

print $row[Daggry];

Hvordan tilføjer jeg tid til $row[Daggry]?

Et sted udskrives resultatet af $row[Daggry] og jeg vil gerne have et andet sted, hvor resultatet $row[Daggry] udskrives plus 10 minutter.

Hvordan gøres dette? Jeg har prøvet mange forskellige kombinationer og har googlet i timer uden succes.
Avatar billede erikjacobsen Ekspert
01. oktober 2004 - 22:07 #1
Der er flere måder. Een er at gøre det i SQL-en:

SELECT *, time_format(Daggry, '%H:%i') AS Daggry,time_format(adddate(Daggry,interval 10 minute), '%H:%i') AS Daggry1 ....
Avatar billede Slettet bruger
01. oktober 2004 - 22:10 #2
Du kan gøre noget ala:

// nuværende tid.
$current = $row[Daggry];

// Deler op i timer og minutter.
list($hour, min) = explode(":", $current);

// Ligger 10 minutter til.
$min = $min + 10;

// Hvis vi går over 60 minutter, skal vi ligge en time til.
if($min >= 60) {
    $min = $min - 60;
    $hour + 1;
}

// Hvis vi går over i et nyt døgn. Skal timer ikke være 24, men 00.
if($hour == 24) {
    $hour = "00";
}

// Ny tid, med plus 10 minutter.
$new_time = "$hour:$min";
Avatar billede Slettet bruger
01. oktober 2004 - 22:10 #3
heh havde ikke lige tænkt på interval :P
Avatar billede Slettet bruger
01. oktober 2004 - 22:12 #4
Det går bare rigtig godt :|
Linjen her skal selvfølgelig tilføjes et $
list($hour, min) = explode(":", $current);

list($hour, $min) = explode(":", $current);
Avatar billede Slettet bruger
01. oktober 2004 - 22:15 #5
Jeg skal da vist bare gå i seng.
Har også flyttet i dag, og slæbt ting op på 3. sal.

Men endnu en fejl her:
$hour + 1;

skal enten være:
$hour = $hour + 1;
eller
$hour++;
Avatar billede erikjacobsen Ekspert
01. oktober 2004 - 22:15 #6
Skal det endelig gøres i PHP, skal man nok gribe det lidt anderledes an:

    SELECT *, unix_timestamp(Daggry) AS utime FROM tider WHERE dato='$dato'

og så

    $timestamp=$row['utime'];

    print date("H:i",$timestamp)."\n";
    print date("H:i",$timestamp+10*60)."\n";
Avatar billede coolzone Nybegynder
01. oktober 2004 - 22:21 #7
Metoden med interval:

SELECT *, time_format(Daggry, '%H:%i') AS Daggry,time_format(adddate(Daggry,interval 10 minute), '%H:%i') AS Daggry1

Virker ikke den har jeg prøvet. Daggry giver tiden 05:33 og Daggry1 giver 05:33:00 - den ser helt bort fra formateringen.

Cyberman dit svar virker perfekt! Hvos har du fået denne linie fra "list($hour, min) = explode(":", $current);"? Var det lige noget du fandt på eller?
Avatar billede erikjacobsen Ekspert
01. oktober 2004 - 22:23 #8
Den med interval virker skam, hvis du laver det korrekt ;)
Avatar billede coolzone Nybegynder
01. oktober 2004 - 22:25 #9
Der var jeg for hurtigt. Cybermann - med 10 minutter virker det, men hvis tiden tilføres 33 minutter så bliver resultatet noget rod.

Tiden er 05:33

+10 min 05:43

+33 min = 6:6
Avatar billede coolzone Nybegynder
01. oktober 2004 - 22:26 #10
Nej, den med interval virker ikke. Du har den nok fra MySQL siden. Jeg sad med det i 2 timer igår, hvis man skal bruge denne metode skal man konventere til unix timestamp først.
Avatar billede coolzone Nybegynder
01. oktober 2004 - 22:27 #11
Ok, det vidste du godt :-)
Avatar billede erikjacobsen Ekspert
01. oktober 2004 - 22:31 #12
Interval virker fint, men på et DATETIME felt, og hvis den ikke virker hos dig
er det måske fordi du bruger et TIME felr.
Avatar billede coolzone Nybegynder
01. oktober 2004 - 22:36 #13
Det er et TIME felt og det skal kun være et TIME felt. Hvordan får jeg det til at virke på et TIME felt. Intet af det ovenstående har virket uden fejl. Kom med det som det skal stå.
Avatar billede coolzone Nybegynder
01. oktober 2004 - 22:38 #14
og utime, hvor kommer det fra?
Avatar billede coolzone Nybegynder
01. oktober 2004 - 22:42 #15
Jeg har også prøvet at konvertere listen til DATETIME, men det virker ikke. Tiden bliver den samme uden tilføjelse.
Avatar billede coolzone Nybegynder
01. oktober 2004 - 22:42 #16
Jeg opretter et nyt spørgsmål og giver 200 point til den der løser det!
Avatar billede erikjacobsen Ekspert
01. oktober 2004 - 22:48 #17
Det skulle der nu ikke være nogen grund til. Problemet med en TIME er at
det ikke er en ordentlig type, og derfor er der ingen rigtige operationer på den
indbygget nogenstedet. Men du kan fx gøre det på denne måde:

  $time=$row['Daggry'];
  list($h,$m)=split(':',$time);
  print sprintf("%02d:%02d\n",$h,$m);  // bare en test ;)
  $a=$h*60+$m+10;
  $h1=floor($a/60);
  $m1=$a%60;
  print sprintf("%02d:%02d\n",$h1,$m1);
Avatar billede erikjacobsen Ekspert
01. oktober 2004 - 22:50 #18
... med mindre dit daggry er lige før midnat. Altså: Den dutter ikke hvis intervallet
passerer midnat. TIME er som sagt ikke en ordentlig type.
Avatar billede erikjacobsen Ekspert
01. oktober 2004 - 22:54 #19
Ok, det med midnat kan vi klare med
    $h1=floor($a/60)%24;
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