Avatar billede shjorth Nybegynder
15. februar 2007 - 17:12 Der er 12 kommentarer og
1 løsning

Difference mellem 2 datoer (php)

Hejsa..

I min database har jeg 2 datoer..
1: Ankomstdato
og
2: Afgangsdato

Jeg skal have lagret de mellemliggende datoer. Er der nogen der ved hvordan man gør det?

f.eks
Ankomstdato = 29/1-07
Afgangsdato = 3/2-07

Hvordan finder jeg datoerne mellem disse?

Mange tak
Avatar billede kalp Novice
15. februar 2007 - 17:17 #1
findes de i databasen? eller skal det udregnes via. php ?
Avatar billede razmuz_dk Nybegynder
15. februar 2007 - 18:46 #2
Du kunne hente start- og slut dato ud som unix-timestamp. Dette gøres sådan (jeg antager du bruger mysql):
SELECT UNIX_TIMESTAMP(start_dato) start_dato, UNIX_TIMESTAMP(slut_dato) slut_dato WHERE [...]

I PHP adderer du så bare 86400 sekunder (et døgn) til startdatoen indtil slut-datoen nås, fx sådan:

$dato = $db_row['start_dato'];
$slut_dato = date("dmY", $db_row['slut_dato']);
while(1) {
  $dato += 86400;
  $temp = date("dmY", $dato);
  if($temp == $slut_dato) break;
  $datoer[] = date("dmY", $dato);
}

På den måde vil du få alle datoer der er i mellem start og slut dato i $datoer-array.

Ovenstående er bare en idé til hvordan det kan gøres. Jeg vil anbefale, at du fx laver noget sikkerhed på den while(1), da det måske en dag resulterer i en uendelig løkke (hvis fx start_dato > slut_dato).

Håber du kunne bruge det.
Avatar billede jakobdo Ekspert
15. februar 2007 - 22:35 #3
Jeg tror du kan bruge denne funktion:

<?
function DatesBetween($startDate, $endDate){
  // get the number of days between the two given dates.
  $days = (strtotime($endDate) - strtotime($startDate)) / 86400 + 1;
  $startMonth = date("m", strtotime($startDate));
  $startDay = date("d", strtotime($startDate));
  $startYear = date("Y", strtotime($startDate)); 
  $dates;//the array of dates to be passed back
  for($i=0; $i<$days; $i++){
      $dates[$i] = date("n/j/Y", mktime(0, 0, 0, $startMonth , ($startDay+$i), $startYear));
  }
  return $dates; 
}

?>

Fundet på: http://www.php.net/date -> mybenchmarkid at yahoo dot com : 13-Feb-2007 10:55
Avatar billede shjorth Nybegynder
16. februar 2007 - 12:11 #4
Jakobdo

Jeg har nu forsøgt, men jeg får bare en udskrift der hedder "Array".
Forsøgte mig med eksemplet fra dit link ($dates = DatesBetween("2/27/2007","3/3/2007")), men det giver bare "array".

Kan du give mig et hint om hvad jeg gør forkert?
Mange tak :)
Avatar billede shjorth Nybegynder
16. februar 2007 - 12:36 #5
Er kommet frem til at udskrive dem således.. Men er vist ikke helt korrekt, og virker kun forudsat der ikke er mere end 15 dage mellem..

print $dates[1]."<br>";
print $dates[2]."<br>";
print $dates[3]."<br>";
print $dates[4]."<br>";
print $dates[5]."<br>";
print $dates[6]."<br>";
print $dates[7]."<br>";
print $dates[8]."<br>";
print $dates[9]."<br>";
print $dates[10]."<br>";
print $dates[11]."<br>";
print $dates[12]."<br>";
print $dates[13]."<br>";
print $dates[14]."<br>";
print $dates[15]."<br>";
Avatar billede jakobdo Ekspert
16. februar 2007 - 12:41 #6
Du kunne gøre sådan her:

$dates = DatesBetween("2/27/2007","3/3/2007");
foreach($dates as $date)
{
echo $date . "<br />";
}
Avatar billede shjorth Nybegynder
16. februar 2007 - 13:23 #7
Smukt.. Virker perfekt..
Ligger du et svar?

Hvis jeg nu vil "tælle" hvor mange dage der er, ved du så hvordan ?

Ihvertfald mange tak
Avatar billede razmuz_dk Nybegynder
16. februar 2007 - 13:32 #8
Ja, du skal bare tælle elementerne i array'et sådan:
count($dates);
Avatar billede shjorth Nybegynder
16. februar 2007 - 13:34 #9
Jamen dog, det fandt jeg også lige ud af count($dates);

Takker mange gange
Avatar billede shjorth Nybegynder
16. februar 2007 - 13:34 #10
Præcis ;)
Avatar billede jakobdo Ekspert
16. februar 2007 - 13:44 #11
Du får lige et svar!
Avatar billede shjorth Nybegynder
16. februar 2007 - 13:45 #12
Jeg siger tak.. så kom jeg lidt videre ;)
Avatar billede jakobdo Ekspert
16. februar 2007 - 13:57 #13
Jeg takker for point.
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