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
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;
  
};