Avatar billede -kenner- Nybegynder
09. marts 2005 - 18:02 Der er 8 kommentarer og
1 løsning

Foreskellen mellem to datoer?

Hej eksperter,

Jeg er forholdsvis ny til php, og søger lidt hjælp til en funktion, som skal regne forskellen ud mellem to datoer i dage.

Jeg vil hente siden med denne kode, så jeg kan have flere forskellige datoer, men bruger den samme side til at behandle datoen i:
<iframe name="HovedFrame" src="side.php?navnl=Palle&navn2=Kirsten&dato=22-10-04" align="center" name="HovedFrame" scrolling=="no" style="width:100%; height:50px;" frameborder="0"></iframe>

Side Koden:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
      <title>Kæreste dage</title>
</head>
<body>
<?php
$navn1 = $_GET['navn1'];
$navn2 = $_GET['navn2'];
$dato = $_GET['dato'];

$dage = $dato - time()

echo "$navn1 og $navn2 har været kærster i $dage"
?>
</body>
</html>
Avatar billede arne_v Ekspert
09. marts 2005 - 18:09 #1
Avatar billede arne_v Ekspert
09. marts 2005 - 18:09 #2
Hvorfor har du iøvrigt postet under XML ?
Avatar billede -kenner- Nybegynder
09. marts 2005 - 19:00 #3
Ups.. Det sker tit for mig, når jeg sroller ned for at trykke tilføj, så sroller den også ned i dropdownen.
Avatar billede -kenner- Nybegynder
09. marts 2005 - 19:12 #4
Hvordan får jeg dags dato? $idag skal være lig med datoen i dag

Med den funktion kommer koden til at se sådan ud:

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
      <title>Kæreste dage</title>
</head>
<body>
<?php

function datediff($interval, $datefrom, $dateto, $using_timestamps = false) {
  /*
    $interval can be:
    yyyy - Number of full years
    q - Number of full quarters
    m - Number of full months
    y - Difference between day numbers
      (eg 1st Jan 2004 is "1", the first day. 2nd Feb 2003 is "33". The datediff is "-32".)
    d - Number of full days
    w - Number of full weekdays
    ww - Number of full weeks
    h - Number of full hours
    n - Number of full minutes
    s - Number of full seconds (default)
  */

  if (!$using_timestamps) {
    $datefrom = strtotime($datefrom, 0);
    $dateto = strtotime($dateto, 0);
  }
  $difference = $dateto - $datefrom; // Difference in seconds

  switch($interval) {

    case 'yyyy': // Number of full years

      $years_difference = floor($difference / 31536000);
      if (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom), date("j", $datefrom), date("Y", $datefrom)+$years_difference) > $dateto) {
        $years_difference--;
      }
      if (mktime(date("H", $dateto), date("i", $dateto), date("s", $dateto), date("n", $dateto), date("j", $dateto), date("Y", $dateto)-($years_difference+1)) > $datefrom) {
        $years_difference++;
      }
      $datediff = $years_difference;
      break;

    case "q": // Number of full quarters

      $quarters_difference = floor($difference / 8035200);
      while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($quarters_difference*3), date("j", $dateto), date("Y", $datefrom)) < $dateto) {
        $months_difference++;
      }
      $quarters_difference--;
      $datediff = $quarters_difference;
      break;

    case "m": // Number of full months

      $months_difference = floor($difference / 2678400);
      while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($months_difference), date("j", $dateto), date("Y", $datefrom)) < $dateto) {
        $months_difference++;
      }
      $months_difference--;
      $datediff = $months_difference;
      break;

    case 'y': // Difference between day numbers

      $datediff = date("z", $dateto) - date("z", $datefrom);
      break;

    case "d": // Number of full days

      $datediff = floor($difference / 86400);
      break;

    case "w": // Number of full weekdays

      $days_difference = floor($difference / 86400);
      $weeks_difference = floor($days_difference / 7); // Complete weeks
      $first_day = date("w", $datefrom);
      $days_remainder = floor($days_difference % 7);
      $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder?
      if ($odd_days > 7) { // Sunday
        $days_remainder--;
      }
      if ($odd_days > 6) { // Saturday
        $days_remainder--;
      }
      $datediff = ($weeks_difference * 5) + $days_remainder;
      break;

    case "ww": // Number of full weeks

      $datediff = floor($difference / 604800);
      break;

    case "h": // Number of full hours

      $datediff = floor($difference / 3600);
      break;

    case "n": // Number of full minutes

      $datediff = floor($difference / 60);
      break;

    default: // Number of full seconds (default)

      $datediff = $difference;
      break;
  }

  return $datediff;

}

//het oplysninger
$navn1 = $_GET['navn1'];
$navn2 = $_GET['navn2'];
$dato = $_GET['dato'];

$idag = date()

$dage = datediff('w', '9 July 2003', '$idag', false);

echo "$navn1 og $navn2 har været kærster i $dage dage"
?>
</body>
</html>
Avatar billede arne_v Ekspert
09. marts 2005 - 19:36 #5
Det bruger du vel date() til som du allerede gør ?
Avatar billede -kenner- Nybegynder
09. marts 2005 - 19:42 #6
Ja, men hvilke faktorer skal jeg sætte ind, for at skriptet virker, jeg kan jo heller ikke linke med mellemrum, så kan det ikke lade sig gøre at få datoen angivet som dd-mm-åååå
Avatar billede arne_v Ekspert
09. marts 2005 - 21:31 #7
http://dk.php.net/manual/en/function.date.php

viser hvordan du kan formatere output fra date
Avatar billede -kenner- Nybegynder
16. marts 2005 - 13:37 #8
Lukket pga. forkert karegori, sorry..
Avatar billede -kenner- Nybegynder
16. marts 2005 - 13:37 #9
Har oprettet i PHP kategorien i stedet for.
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
Kurser inden for grundlæggende programmering

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