EveryNext

Droplet Code

$format = "%A, %d. %B %Y";
$format_with_hour = "%A, %d. %B %Y, %H:%M Uhr";
$locals = array (
        'de_DE',
        'de_DE.ISO8859-1',
        'de_DE.ISO8859-15',
        'de_DE.UTF-8',
        'german',       // IIS
        'deu',    // IIS
);

$oldlocale = setlocale(LC_TIME, NULL); #save current locale
setlocale(LC_ALL, $locals);

if ( ! isset( $day ) ) {
    $day = "monday";
}
if ( ! isset( $month ) ) {
    $month = date('n', time());
}
if ( ! isset( $year ) ) {
    $year  = date('Y', time());
}

$first = strtotime("first $day", mktime( 0, 0, 0, $month, 0, $year));
$today = time();
$time  = $first;

while ( $time < $today ) {
   $time = strtotime("next $day", $today );
}

// set hour
if ( isset ( $hour ) ) {
    // add hour to time
    $time = strtotime( "+$hour hours", $time );
    $format = $format_with_hour;
}

$output = "Nächster Termin: " . strftime($format, $time) . "<br />";

// reset locale
setlocale(LC_TIME, $oldlocale);

return $output;

Verwendung

Wie jedes Droplet, z. B. im Template oder einer WYSIWYG-Sektion.

Als Parameter muß der gewünschte Wochentag angegeben werden.

    [[EveryNext?day=monday]]

Der Name des Wochentages muß auf Englisch angegeben werden. Gültige Werte sind demnach:

monday, tuesday, wednesday, thursday, friday, saturday, sunday

Soll auch eine Uhrzeit angegeben werden, kann diese ebenfalls per Parameter angegeben werden:

    [[EveryNext?day=monday&hour=15]]

Anpassungsmöglichkeiten

Die Datumsformate können in den beiden Variablen $format und $format_with_hour definiert werden. Die möglichen Platzhalter findet man in der Handbuchseite zu strftime().

Zudem kann der Ausgabetext angepaßt werden:

$output = "Nächster Termin: " . strftime($format, $time) . "<br />";

Dabei bitte auf die Anführungszeichen etc. achten!

Bei der Vorstellung im Forum gab es auch noch die Idee, das Datumsformat als Parameter zu übergeben. Das habe ich allerdings nicht umgesetzt.