Doppeltes Datum prüfen

holger_buns

Mitglied
Gleiche Datumsangaben im Formular prüfen lassen

Hallo, ich habe ein Buchungsformular für ein Hotel in dem die entsprechenden Daten der Gäste abgefragt werden. Dieses wird dann mittels php geprüft und versendet.
Im Formular gibt es zwei Formularfelder: Anreisedatum und Abreisedatum. Ich kann bei beiden ein entsprechendes Datum auswählen über ein Javascript Befehl, welcer ein entsprechenden Kalender öffnet, um das Datum auszuwählen.
Leider ist keine Prüfung im Formular vorhanden, welche prüft ob bei beiden Feldern, also Anreisedatum und Abreisedatum das gleiche Datum eingetragen wurde. Dieses sollte nicht der Fall sein. Also hätte ich gerne eine Prüfung, ob beide eingetragenen Datumsangaben sich unterscheiden. Wenn beide Datumsangaben gleich sind, soll eine Fehlermeldung erscheinen, die mich darauf aufmerksam macht. Entweder direkt beim eintragen oder spätestens beim Absenden des Formulares.

Wer kann mir helfen?

Es geht um diese Seite (ohne styles):
http://www.plastisches.de/test/test4/buchungsanfrage.php

Hier der Javascript Befehl der verwendet wird für die Datumsauswahl:
Code:
<script>
$(document).ready(function() {
$( ".datepicker" ).datepicker();
});
jQuery(function($){
        $.datepicker.regional['de'] = {clearText: 'löschen', clearStatus: 'aktuelles Datum löschen',
                closeText: 'schließen', closeStatus: 'ohne Änderungen schließen',
                prevText: '<zurück', prevStatus: 'letzten Monat zeigen',
                nextText: 'Vor>', nextStatus: 'nächsten Monat zeigen',
                currentText: 'heute', currentStatus: '',
                monthNames: ['Januar','Februar','März','April','Mai','Juni',
                'Juli','August','September','Oktober','November','Dezember'],
                monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
                'Jul','Aug','Sep','Okt','Nov','Dez'],
                monthStatus: 'anderen Monat anzeigen', yearStatus: 'anderes Jahr anzeigen',
                weekHeader: 'Wo', weekStatus: 'Woche des Monats',
                dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
                dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
                dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
                dayStatus: 'Setze DD als ersten Wochentag', dateStatus: 'Wähle D, M d',
                dateFormat: 'dd.mm.yy', firstDay: 1, 
                initStatus: 'Wähle ein Datum', isRTL: false};
        $.datepicker.setDefaults($.datepicker.regional['de']);
});
</script>

Hier der php Teil der in der gesamten Datei an unterschiedlichen Stellen verwendet wird:
PHP:
<?
            require_once "formvalidator.php";     
            $show_form  = true;     
            if(isset($_POST['Submit']))     
            {     
              $validator = new FormValidator();     
              $validator->addValidation("Spam","spam=$authHosts","Error 403 - Zugriff verweigert. Keine Berechtigung");     
              $validator->addValidation("Name","req","Bitte geben Sie Ihren Namen ein");
              $validator->addValidation("Vorname","req","Bitte geben Sie Ihren Vornamen ein");
              $validator->addValidation("Strasse","req","Bitte geben Sie Ihre Straße ein");
              $validator->addValidation("Plz_Ort","req","Bitte geben Sie Ihre Postleitzahl und den Ort ein");
              $validator->addValidation("Telefon","req","Bitte geben Sie Ihre Telefonnummer für Rücfragen ein");
              $validator->addValidation("Email","req","Bitte geben Sie Ihre E-Mail Adresse ein");
              $validator->addValidation("Anreise","req","Bitte geben Sie das gewünschte Anreisedatum ein");
              $validator->addValidation("Abreise","req","Bitte geben Sie das gewünschte Abreisedatum ein");
              $validator->addValidation("Personen","req","Bitte geben Sie die Personenzahl ein");
              $validator->addValidation("Einzelzimmer","req","Bitte geben Sie die Anzahl der Einzelzimmer ein");
              $validator->addValidation("Doppelzimmer","req","Bitte geben Sie die Anzahl der Doppelzimmer ein");
              if($validator->ValidateForm())      
              {     
              require_once "output.php";      
              $show_form=false;     
              }     
              else      
              {     
              echo "<div id='errorbox'>\n<ul>\n";     
              echo "<span class='errorstr'><B>Folgende Fehler sind aufgetreten:</B></span><br /><br />\n";      
              $error_hash = $validator->GetErrors();      
              foreach($error_hash as $inpname => $inp_err)      
              {     
              echo "<li>".ereg_replace("_"," ",$inpname).": $inp_err</li>\n";     
              }     
              echo "</ul>\n</div>\n";     
              }     
            }     
            if(true == $show_form)      
            {     
            ?>

PHP:
<div class="reihe">
                              <span class="label">Gew&uuml;nschte Anreise:*</span>
                                <span class="feld"><? if ($error_hash["Anreise"] != "") { ?><span style="float:left; margin-right:10px"><img src="http://www.tutorials.de/images/error.gif" alt="<? echo $error_hash['Anreise']; ?>" /></span><? } ?> 
                                <input type="text" name="Anreise" class="datepicker textfeld_date" value='<?php echo @$_POST['Abreise']; ?>' /></span>
                            </span></div>
                            <div class="reihe">
                              <span class="label">Gew&uuml;nschte Abreise:*</span>
                                <span class="feld"><? if ($error_hash["Abreise"] != "") { ?><span style="float:left; margin-right:10px"><img src="http://www.tutorials.de/images/error.gif" alt="<? echo $error_hash['Abreise']; ?>" /></span><? } ?> 
                                <input type="text" name="Abreise" class="datepicker textfeld_date" value='<?php echo @$_POST['Abreise']; ?>'></span>
                            </span></div>
 
Zuletzt bearbeitet:
Hi,

wenn du die erforderlichen Daten hast, kannst du Date-Objekte erstellen - SelfHTML. Diese kannst du miteinander vergleichen:
grösser
Code:
new Date(2014, 1, 1) > new Date(2014, 0, 1)
auf Gleichheit, indem du deren Timestamps vergleichst.
Code:
new Date(2014, 1, 1).getTime() === new Date(2014, 1, 1).getTime()
Im Übrigen geht der Link zur Beispielseite nicht.

Ciao
Quaese
 
Auch wenn der Beitrag bei Javascript & Ajax steht, die Prüfung selber wird doch durch PHP gemacht.

Würde es da nicht mehr Sinn machen die Prüfung in die validator-Klasse aufzunehmen?
 
Hallo, danke für die beiden infos! Mir ist es im Prinzip egal, wie ich es realisieren kann. Wenns über php geht, nehme ich auch gerne diese Variante, dann bin ich auf der sicheren Seite, falls jemand Javascript deaktiviert hat.
Leider hab ich aber keinen Anhaltspunkt wie ich das in php mit in die Prüfung nehmen kann. Gibts dazu ein Beispiel oder Script?

Gruss
Holli
 
PHP:
$validator = new FormValidator();

Das sollte doch für die Prüfung der Daten mittels PHP zuständig sein!? Wenn du es da einbauen willst, musst du uns den Code zeigen.

Wenn es dir generell um die Prüfung/den Vergleich von zwei Datumsangaben geht:

PHP:
$d1 = '11-02-2014';
// das geht
$d2 = '12-02-2014';
// das ginge nicht
//$d2 = '11-02-2014';
$von = strtotime($d1);
$bis = strtotime($d2);

if ($von >= $bis) {
	echo "Von ist größer oder gleich wie Bis";
} else {
	echo "Alles gut.";
}
 
Hallo,

von strtotime() rate ich ab. Gib mal ein Datum vor 1970 an. Dann kommt -1 oder was weiss der Geier raus....
Oder gib mal Testweise strtotime('1900-01-01') aus und es ergibt gar kein Ergebnis.

Ich habe mir mal eine Funktion gebastelt...
Sieht vllt komisch aus, aber erfüllt den Zweck
PHP:
function compareDateTime($first, $compare, $last) {
    $first = date_format(date_create($first ? $first : "0001-01-01 00:00:00"), "Y-m-d H:i:s");
    $last = date_format(date_create($last ? $last : "0001-01-01 00:00:00"), "Y-m-d H:i:s");

    switch (trim($compare))
    {
        case ">":
            if ($first > $last)
                return true;
            break;
        case "<":
            if ($first < $last)
                return true;
            break;
        case "==":
            if ($first == $last)
                return true;
            break;
        case "<=":
            if ($first <= $last)
                return true;
            break;
        case ">=":
            if ($first >= $last)
                return true;
            break;
        case "!=":
        case "<>":
            if ($first != $last)
                return true;
            break;
    }

    return false;
}

Beispiel:
PHP:
$datum1 = "1800-01-01 22:45";
$datum2 = "22.10.1745 11:12:13";

if (compareDateTime($datum1, ">=", $datum2))
{
    // TRUE: $datum1 ist Grösser 
}
 
Zuletzt bearbeitet:
Ohne jetzt deine Funktion bewerten zu wollen.

Hallo, ich habe ein Buchungsformular für ein Hotel in dem die entsprechenden Daten der Gäste abgefragt werden.

Es sollte gar nicht erst möglich sein ein Datum auszuwählen welches kleiner als das aktuelle Datum ist! Denn welches Sinn macht es ein Zimmer für einen Zeitraum in der Vergangenheit zu buchen?
 
Ohne jetzt deine Funktion bewerten zu wollen.
Es sollte gar nicht erst möglich sein ein Datum auszuwählen welches kleiner als das aktuelle Datum ist! Denn welches Sinn macht es ein Zimmer für einen Zeitraum in der Vergangenheit zu buchen?

So wie ich ihn verstanden habe möchte er ein Serverseitige Überprüfung haben. Dafür sollte die Funktion sein.

Direkt auf der Seite stellt es kein Problem dar, da er ja bereits das datepicker Plugin verwendet.
Javascript:
$('#datum').datepicker('option', {'minDate': '12.10.2014'});
 
Zuletzt bearbeitet von einem Moderator:
Zurück