On 11-06-2010 13:28, Dennis Munding wrote:
> Hej NG,
>
>
> Jeg har stirret mig blind på et problem - koden det drejer sig om:
>
> $hol_start = '';
> $hol_end = '';
> $hol_check = date("$i/n/Y"); <!-- $i bliver defineret tidl. i scriptet.
> Ingen problem i det!
>
> $cur_year = date("Y");
> $hol_dates = array("14/6/$cur_year", "20/6/2010");
> $hol_events = array("Flag Day", "Fathers Day");
>
> if(in_array($hol_check, $hol_dates)) {
> $class = "test";
> $hol_title = ??; <--- HER ER PROBLEMET!!
> $hol_start = "<acronym class='" . $class . "' title='" . $hol_title . "'>";
> $hol_end = "</acronym>";
> }
Et 2D array ville være smart at bruge
Kunne fx. se således ud
Vi smider det ind i en funktion, for overskulighedens skyld
function getDays($day, $month, $year, array $dates) {
$outputDays = array();
foreach($dates AS $name => $day)
{
if (isset($day['month']) && $day['month'] != $month) {
continue;
// continue er faktisk lidt misforstået imo
// da det faktisk betyder at den skal starte
// med næste loop i foreach'en - lidt ala "break and continue"
}
if (isset($day['year']) && $day['year'] != $year) {
continue;
}
// nu er både måned og år rigtige - så nu kan vi tjekke på dag
if ($day['day'] == $day) {
// Whieee dagen er også korrekt :)
// Så vi smider den i et array,
// så vi kan have flere dage på samme dato
$outputDays[] = $name;
}
}
return $outputDays;
}
Sådan her kan funktionen kaldes
$dates = array(
'flag dag' => array('day' => 28, 'month' => 10),
'løn dag' => array('day' => 28),
'min 30 års fødselsdag' => array('day' => 14, 'month' => 5, 'year' =>
2010)
);
// Først laver vi lige de forskellige datoer som vi gerne vil have
Så kalder vi funktionen
$days = getDays(date('d'), date('m'), date('Y'), $dates);
Nu har vi et array med navn(e) eller bare et tomt array, den kan så
løkkes eller bare udskrives med implode
fx.
echo implode('<br />', $days);
> Et spark i den rigtige retning eller et relevant link (med god
> forklaring!) ville blive modtaget med stor taknemmelighed.
Desuden så kan jeg klart anbefale at kigge på PEAR pakken
Date_Holidays_Danish, så behøver man heller ikke begynde på den
umenneskelige udregning af påsken :)
http://pear.php.net/package/Date_Holidays_Denmark
Så er det sådan set bare at skrive
$driver = &Date_Holidays::factory('denmark', date('Y), 'da_DK');
$dstr = '2010-06-15';
$workday = new Date($dstr);
if ($driver->isHoliday($workday)){
echo "{$dstr} is a holiday\n";
}
Så kan man også tilføje sine egne datoer via
$this->_addHoliday('newYearsEve',
$this->_year . '-12-31',
'New Year\'s Eve');
$this->_addTranslationForHoliday('newYearsEve', 'da_DK', 'Nytårsaften');
direkte i driveren, eller man kan lave sin egen driver - som så kan
hente datoerne fra database eller lign.
>
> Kalenderen som det hele handler om, kan ses her - med markering på
> datoerne (rød skrift), men uden visning af $hol_title:
>
http://pgsquad.com/main.php?page=test - Det er den store kalender...
Som kalender der også kan bruges sammen med Date_Holidays kunne fx. være
http://pear.php.net/package/Calendar