Avatar billede sjh Nybegynder
08. december 2007 - 00:29 Der er 18 kommentarer og
1 løsning

Problemer med tid over 24

Jeg har nogle problemer når klokken er over 24 eller 00

Iden med mit script er at jeg skal have 2 tider ud.

Hvis klokken er "06.01" så skal jeg have "06.00" og "09.45" ud.. osv..

Problemet kommer så når klokken bliver over 24 eller 00 så er det som om den starter forfra
selv om der både er "01.15" og "02.30" tilbage.. fatter ikke hvorfor..


<?php
  function parsedate($value)
  {
    $explode = explode(".", $value);
    $day    = intval(date("d"));
    $hour    = intval($explode[0]);
    $minute  = intval($explode[1]);
    if ($hour < 0)
    {
      $day++;
    }
    return mktime($hour, $minute, 0, date("m"), $day, date("Y"));
  }

  /* Test data */
  $times[parsedate('06.00')] = "Tekst 06.00";
  $times[parsedate('09.45')] = "Tekst 09.45";
  $times[parsedate('23.55')] = "Tekst 23.55";
  $times[parsedate('00.05')] = "Tekst 00.05";
  $times[parsedate('01.15')] = "Tekst 01.15";
  $times[parsedate('02.30')] = "Tekst 02.30";
  /* Test data */

  $array = array();
  if (is_array($times))
  {
    foreach($times as $time => $value)
    {
      if ($time > time()))
      {
        if ($oldtime)
        {
          $array[] = array($oldtime, $times[$oldtime]);
          $array[] = array($time, $times[$time]);
          break;
        }
      }
      $oldtime = $time;
    }
  }
 
  echo '<pre>';
  print_r($array);
  echo '</pre>';
?>
Avatar billede onkel_satan Nybegynder
08. december 2007 - 02:14 #1
Så vidt jeg kan se lægger problemet i at du kun angiver timer og minuter i din testdata.  Den har ingen data referer imod. Så når du du passere midtan tror den stadig det er samme dag, bare om morgenen (am). Prøv at give din test data daot og år også.
Avatar billede sjh Nybegynder
08. december 2007 - 09:36 #2
øhh for jeg ikke tilføjet en dag under parsedate() da ??

    if ($hour < 0)
    {
      $day++;
    }
Avatar billede erikjacobsen Ekspert
08. december 2007 - 09:49 #3
Ingen af dine $hour er under 0.

Hvad er det du skal have udregnet?
Avatar billede sjh Nybegynder
08. december 2007 - 10:59 #4
Det er nogle tider som er i tv nu jeg gerne vil have ud, så jeg kan se hvad der køre lige nu og hvad det næste program er..

Altså hvis klokken er "18.01" så skal den vise "18.00" og "18.30"

<?php
  $array = file("nowtv.txt");

  if (is_array($array))
  {
    $times = array();
    foreach($array as $value)
    {
      if (eregi("([0-9]{1,2}\.[0-9]{1,2}) (.*)", $value, $matches))
      {
        $times[$matches[1]] = $matches[1]." ".trim($matches[2]);
      }
    }
  }

  echo '<pre>';
  print_r($times);
  echo '</pre>';

/* nowtv.txt
05.40 De Fantastiske 5 fra USA (34)
06.30 Melrose Place (57)
07.20 Melrose Place (58)
08.10 Tv-shop
10.10 Montel Williams Show (19)
11.05 Projekt Catwalk (11)
12.00 Projekt Catwalk (12)
13.00 Girls behaving badly (6)
13.30 Why Do Fools Fall in Love?
15.50 Scrubs (118)
16.20 Scrubs (119)
16.50 Top Gear (47)
17.25 Top Gear (48)
18.00 Simpsons (87)
18.30 Simpsons (88)
19.00 Simpsons (89)
19.30 Simpsons (90)
20.00 Top Gear (66)
21.10 Manden med jernmasken
23.45 Gæt, hvem der ligger under sengen
01.50 Dig og mig
03.50 Projekt Catwalk (11)
04.35 Projekt Catwalk (12)
nowtv.txt */
?>
Avatar billede erikjacobsen Ekspert
08. december 2007 - 11:08 #5
Så skal du bruge det aktuelle tidspunkt for at kunne se hvad de er før nu og efter nu.
Avatar billede sjh Nybegynder
08. december 2007 - 11:12 #6
Jeg har kun de tider.. så jeg må gå udfra at når klokker er over 24 (00) så er det en ny dag.

hjælpe mig :D
Avatar billede erikjacobsen Ekspert
08. december 2007 - 11:15 #7
Jamen alle tider ligger imellem 0 og 23, så der er ikke noget der hedder "over 24".

Hvis klokken er 17.59 så er det dem, der ligger nedenunder på listen (2 timers Simpsons...), men du kan ikke bare skelne mellem 08.10 TV-shop (whau) og 04.35 Catwalk alene ved at kigge på tidspunktet.
Avatar billede sjh Nybegynder
08. december 2007 - 11:45 #8
Jeg "tror" det virker nu.. ved at læse $stampfile så kan jeg vel vide hvornår det er en ny dag "if ($hour >= 0 && $hour <= 5)"
da tider bliver opdateret klokken 06.00

Ser det ikke ud til at virke ??

<?php
  $filename = 'nowtv.txt';

  $array    = file($filename);
  $stampfile = filemtime($filename);

  /* Test time skal selfølige udskiftes med time() */
  $mytime = mktime(0, 16, 0, 12, 9, 07);

  if (is_array($array))
  {
    $times = array();
    foreach($array as $value)
    {
      if (eregi("([0-9]{1,2}\.[0-9]{1,2}) (.*)", $value, $matches))
      {
        $explode = explode(".", $matches[1]);
        $day    = intval(date("d", $stampfile));
        $year    = intval(date("y", $stampfile));
        $hour    = intval($explode[0]);
        $month  = intval(date("m", $stampfile));
        $minute  = intval($explode[1]);
        if ($hour >= 0 && $hour <= 5)
        {
          $day++;
        }
        $stamp = mktime($hour, $minute, 0, $month, $day, $year);
        $times[$stamp] = $matches[1]." ".trim($matches[2])." <b>[".date("d-m-Y", $stamp)."]</b>";
      }
    }
  }

  $array = array();
  foreach($times as $time => $value)
  {
    if ($time > $mytime) /* <-- Test time */
    {
      if ($oldtime)
      {
        $array[] = array($oldtime, $times[$oldtime]);
        $array[] = array($time, $times[$time]);
        break;
      }
    }
    $oldtime = $time;
  }

  echo '<pre>';
  print_r($array);
  print_r($times);
  echo '</pre>';
?>
Avatar billede erikjacobsen Ekspert
08. december 2007 - 12:48 #9
Det er dig selv der ved om det virker. Men hvad med de første på listen, TV-shop og før. Kommer de rigtigt ud?
Avatar billede sjh Nybegynder
08. december 2007 - 13:25 #10
Ja det skulle vel passe når jeg for det lavet om til timestamp..

        $explode = explode(".", $matches[1]);
        $day    = intval(date("d", $stampfile));
        $year    = intval(date("y", $stampfile));
        $hour    = intval($explode[0]);
        $month  = intval(date("m", $stampfile));
        $minute  = intval($explode[1]);
        if ($hour >= 0 && $hour <= 5)
        {
          $day++;
        }
        $stamp = mktime($hour, $minute, 0, $month, $day, $year);
Avatar billede sjh Nybegynder
08. december 2007 - 13:31 #11
JA der kan selfølige blive et problem hvis $day bliver 32.. de månder hvor der er 31 dage i.. Ved ikke lige hvordan jeg klare den.. :(

Kan i ikke smide et par. svar..
Avatar billede erikjacobsen Ekspert
08. december 2007 - 13:42 #12
I stedet for at tælle dagen op med een kan du sikkert bare lægge 60*60*24 til timestampværdien. Jeg kan stadig ikke se at det virker, men det du om.

TV-oversigter, som du viser, har det med at være tvetydige - du kan ikke få det på et fornuftigt format?

Ingen point til mig, tak.
Avatar billede sjh Nybegynder
08. december 2007 - 13:51 #13
"fornuftigt format" desværre.. men skal da høre om jeg kan få tider i timestamp..
Avatar billede erikjacobsen Ekspert
08. december 2007 - 13:53 #14
Bare du kunne få det som 

  "2007-12-09 08.10 Tv-shop"

så du aldrig går glip af dit yndlingsprogram.    ;)
Avatar billede erikjacobsen Ekspert
08. december 2007 - 13:58 #15
Og det er så fordi der ikke er nogen tvetydighed, hvis dem samlede liste ser således ud:

2007-12-09 05.40 De Fantastiske 5 fra USA (34)
2007-12-09 06.30 Melrose Place (57)
2007-12-09 07.20 Melrose Place (58)
2007-12-09 08.10 Tv-shop
2007-12-09 10.10 Montel Williams Show (19)
2007-12-09 11.05 Projekt Catwalk (11)
2007-12-09 12.00 Projekt Catwalk (12)
2007-12-09 13.00 Girls behaving badly (6)
2007-12-09 13.30 Why Do Fools Fall in Love?
2007-12-09 15.50 Scrubs (118)
2007-12-09 16.20 Scrubs (119)
2007-12-09 16.50 Top Gear (47)
2007-12-09 17.25 Top Gear (48)
2007-12-09 18.00 Simpsons (87)
2007-12-09 18.30 Simpsons (88)
2007-12-09 19.00 Simpsons (89)
2007-12-09 19.30 Simpsons (90)
2007-12-09 20.00 Top Gear (66)
2007-12-09 21.10 Manden med jernmasken
2007-12-09 23.45 Gæt, hvem der ligger under sengen
2007-12-10 01.50 Dig og mig
2007-12-10 03.50 Projekt Catwalk (11)
2007-12-10 04.35 Projekt Catwalk (12)
Avatar billede sjh Nybegynder
08. december 2007 - 15:13 #16
Jeg prøver at høre om jeg ikke kan få tider i timestamp.. men det kan jo ikke blive før mandag..

Smid et par. svar så jeg kan få lukket..
Avatar billede erikjacobsen Ekspert
08. december 2007 - 18:35 #17
Ingen point til mig, tak.
Avatar billede sjh Nybegynder
10. december 2007 - 19:59 #18
hvad så med dig onkel satan.. point ??
Avatar billede sjh Nybegynder
14. december 2007 - 16:33 #19
når så tager jeg dem da selv..

mange tak for hjælpen..
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