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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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