03. december 2008 - 23:46
Der er
6 kommentarer og 1 løsning
array af datoer udfra dags dato
Hejsa Jeg skal på en eller anden måde lave et array af 9 datoer (fødselsdage) hvor næstekommende dato altid er 1. plads osv... Altså en løkke. Nogen idéer? /Benji
Annonceindlæg fra QNAP
04. december 2008 - 08:28
#1
Hvordan har du datoerne gemt i dag ?
04. december 2008 - 08:41
#2
<?php // definer array af datoer $foedselsdage = array(); // tilføj datoer $foedselsdage[] = '2009-05-25'; $foedselsdage[] = '2009-11-14'; $foedselsdage[] = '2009-04-26'; $foedselsdage[] = '2009-03-31'; // definer en funktion som sammenligner datoer function sammenlign($dato1, $dato2) { if (strtotime($dato1) == strtotime($dato2)) { return 0; } return (strtotime($dato1) < strtotime($dato2)) ? -1 : 1; } // kald usort med to parametre dit array af datoer og din // sammenligningsfunktion // bemærk at array'et $foedselsdage bliver overført // som reference parameter, dvs. funktionen usort ændrer // arrayets værdi usort($foedselsdage, 'sammenlign'); foreach ($foedselsdage as $dato) { print $dato . '<br>'; } ?>
04. december 2008 - 23:27
#3
--> bilal_isa Jeg skal ikke have et array der tager udgangspunkt i år. Kun måned og dag. --> jakobdo Det kan jeg selv bestemme. Jeg opsummerer lige, at jeg skal bruge et array, der ændrer sig 9 gange om året. Hver gang en dato er passeret, bliver rækkefølgen jo anderledes. Lige nu ville rækkefølgen f.eks. se således ud: 18. december 19. december 15. januar 15. februar 4. maj 14. maj 11. september 3. november 30. november men når 18. december er passeret bliver denne dato SIDSTE post i array'et osv /Benji
05. december 2008 - 08:24
#4
Gem dato i database, så burde du kunne lave udtræk som altid viser de næste 9 fødselsdage.
05. december 2008 - 17:41
#5
Hej Benji Du kan gøre din sammenligningsfunktion uafhængig af årstal, så den kun sammenligner på måned og dag. Se nedenfor. Du har f.eks. dine fødselsdatoer gemt i en MYSQL database eller en XML-fil. Du hiver dine datoer ud og sætter dem ind i et array. Så sorterer du dem efter voksende orden. Tilsidst løber du dem igennem og frasorterer de datoer som er blevet passeret af dagens dato. <?php // definer array af datoer $foedselsdage = array(); // tilføj datoer $foedselsdage[] = '1987-05-25'; $foedselsdage[] = '1949-11-14'; $foedselsdage[] = '1988-04-26'; $foedselsdage[] = '1977-03-31'; $foedselsdage[] = '1985-01-01'; $foedselsdage[] = '1985-12-13'; // definer en funktion som sammenligner datoer function sammenlign($dato1, $dato2) { $dato_dele_1 = getdate(strtotime($dato1)); $dato_dele_2 = getdate(strtotime($dato2)); $maaned_1 = $dato_dele_1['mon']; $dag_1 = $dato_dele_1['mday']; $maaned_2 = $dato_dele_2['mon']; $dag_2 = $dato_dele_2['mday']; if ($maaned_1 == $maaned_2) { if ($dag_1 == $dag_2) { return 0; } else if ($dag_1 < $dag_2) { return -1; } else { return 1; } } elseif ($maaned_1 < $maaned_2) { return -1; } return 1; } // kald usort med to parametre dit array af datoer og din // sammenligningsfunktion // bemærk at array'et $foedselsdage bliver overført // som reference parameter, dvs. funktionen usort ændrer // arrayets værdi // sorterer fødselsdagsdatoerne i voksende // rækkefølge efter måned og dag (uanset fødselsår) usort($foedselsdage, 'sammenlign'); $foedselsdage_2 = array(); $dato_dele_i_dag = getdate(); $dag_aktuel = $dato_dele_i_dag['mday']; $maaned_aktuel = $dato_dele_i_dag['mon']; // løb foedselsdage igennem // tilføj fødselsdatoer som kommer efter dagens dato til $foedselsdage_2 foreach ($foedselsdage as $dato) { $dato_dele = getdate(strtotime($dato)); $dag = $dato_dele['mday']; $maaned = $dato_dele['mon']; if ($maaned_aktuel <= $maaned) { if ($dag_aktuel < $dag) { $foedselsdage_2[] = $dato; } } } foreach ($foedselsdage_2 as $dato) { print $dato . '<br>'; } ?> Løser det dit problem?
09. december 2008 - 00:48
#6
Får umiddelbart kun næste dato i print $dato, men det har helt klart givet materiale til at køre videre - tak. /Benji
09. december 2008 - 00:57
#7
Det var så lidt :)
Vi tilbyder markedets bedste kurser inden for webudvikling