Mittwoch, 2. November 2011

PHP: Erster Montag im Monat

Der Frager hat ein "kleines" Problem mit der PHP-Funktion "strtotime". Nach einem Umzug zu einem anderen Hoster funktionierte diese trotz gleicher PHP-Version nicht mehr wie gewohnt. strtotime ist eine Funktion welche versucht(!) aus einem String einen Zeitpunkt zu ermitteln und ist wohl von vielem, u.a. von Lokaliserungseinstellungen abhängig. Im konkreten Fall führt der Luxus aber auch zu Unwägbarkeiten ...und die sollte man umgehen.
<?php
#Test:
print ErsterWochentagImMonat( 11, 2011, 1 )."\n";

function ErsterWochentagImMonat(
$intMonat, $intJahr, $intWochentag
) {

### Erwartete Daten:
#$intMonat = '1...12 (Januar...Dezember)

#$intWochentag = 0 für Sonntag;
#$intWochentag = 1 für Montag
# ...
#$intWochentag = 6 für Sonnabend;

# Plausibilitätsprüfungen:
if ( 1 > $intMonat || 12 < $intMonat ) {
return false;
}
if ( 0 > $intWochentag || 6 < $intWochentag ) {
return false;
}

# Berechnung:
$intTag=date( 'w', mktime ( 0, 0, 0, $intMonat, 1, $intJahr ) );
# Ergebnis: 0 ... 6
if ( $intTag == $intWochentag ) {
return '01.' . ZweiStellig($intMonat) . '.' . $intJahr;
} else {
if ( $intTag < $intWochentag ) {
return ZweiStellig( $intWochentag - $intTag + 1 )
. '.' . ZweiStellig($intMonat)
. '.' . $intJahr;
} else {
return ZweiStellig( $intWochentag - $intTag + 8 )
. '.' . ZweiStellig($intMonat)
. '.' . $intJahr;
}
}
return false;
}

function ZweiStellig( $int ) {
$int = intval( $int );
if ( $int < 10 ) {
return '0' . $int;
}
return $int;
}
?>

Keine Kommentare:

Kommentar veröffentlichen