Datumsabfrage für bedingten Formular-Container
Die Callback- und JavaScript-Funktion ermöglicht eine Datumsabfrage, um z.B. abhängig vom gewählten Datumsbereich andere Felder / Elemente anzuzeigen.
In diesem Fallbeispiel soll im Formular ein weiteres Formular-Feld oder Textfeld erscheinen, wenn das gewählte Datum zwischen dem 15.11. und 30.04. liegt (~ Winterzeitraum).
Formular mit Datum und bedingtem Formular-Conteiner
Nachfolgend die im "bedingten Container mit Formularelementen" verwendete PHP-Funktion "isValidDateInRange", welche in der wMyProject.php definiert ist. Zudem für die clientseitige Prüfung erforderliche isValidDateInRange JS-Funktion, welche entweder in der design.js abgelegt werden kann oder in der Formularseite selber über ein JavaScript-Element eingebunden sein kann.
isValidDateInRange Callback Funktion für Formular Datum Prüfung
// Funktion zur Definition in der wMyProject.php
//*********************************************************************************/
/**
* @method String isValidDateInRange(String $value)
*
* @description Callback Funktion für eigene Formular-Validatoren (Datumsbereich)
*
* @param element - Zu prüfendes Element
*
* @return Boolean
*
*/
//*********************************************************************************/
public static function isValidDateInRange($value){
$value = trim((string)$value);
// Optionalen Wochentag am Anfang entfernen, z.B. "Di, 17.03.2026"
$value = preg_replace('/^(?:Mo|Di|Mi|Do|Fr|Sa|So),\s*/u', '', $value);
// Format TT.MM.YYYY prüfen und echtes Datum validieren
$date = DateTime::createFromFormat('d.m.Y', $value);
if(!$date || $date->format('d.m.Y') !== $value){
return false;
}
// Bereich 15.11. bis 30.04. prüfen, Jahr egal
$monthDay = $date->format('md');
if(!($monthDay >= '1115' || $monthDay <= '0430')){
return false;
}
return true;
}isValidDateInRange Funktion für Formular Datum Prüfung
// JS-Funktion z.B. in der design.js ablegen oder JavaScript-Element
// Funktion für eigene Formular-Validatoren (Datumsbereich)
isValidDateInRange = function(eventValue){
value = String(eventValue).trim();
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value);
if (!match) return false;
const year = parseInt(match[1], 10);
const month = parseInt(match[2], 10);
const day = parseInt(match[3], 10);
const date = new Date(year, month - 1, day);
if (
date.getFullYear() !== year ||
date.getMonth() !== month - 1 ||
date.getDate() !== day
) return false;
const monthDay = `${String(month).padStart(2, '0')}${String(day).padStart(2, '0')}`;
if (!(monthDay >= '1115' || monthDay <= '0430')) return false;
return true;
};