Ich habe Sie um Unterstützung gebeten, das Ablaufdatum anzuzeigen, wenn der Benutzer das Start- und Enddatum aus dem Kalender auswählt. Nach Auswahl des Enddatums aus dem Kalender sollte das Ablaufdatum um zwei Monate zum Enddatum hinzugefügt werden. Beispielsweise: Der Benutzer wählt den 9. Oktober 2012 als Startdatum. 16. Oktober 2012 als Enddatum; Der 16. Dezember 2012 sollte das Ablaufdatum sein. Wie kann ich dies in JavaScript erreichen?

Bitte überprüfen Sie diesen Code, da ich nicht weiß, wie ich diesen bearbeiten soll.

/**
 * Click "Cal" on expiry date
 */
function getExpiryDate() {
if(!document.getElementById('enddate').value.length) {
    alert("End date must be set first.");
}
else {
    prevExpiryDate = document.getElementById('expirydate').value;
    displayCalendar(document.forms[0].expirydate,'yyyy/mm/dd',
        document.getElementById('expirydatebutton'));
}
}
0
user1410081 9 Okt. 2012 im 14:55

3 Antworten

Beste Antwort

JavaScript enthält ein natives Date Objekt. Sie können es wie folgt um Monate erweitern ...

var endDate = document.getElementById('enddate').value;
var date = new Date(endDate);
date.setMonth(date.getMonth() + 2); // Yes it will calculate going over a year etc
prevExpiryDate = date.getFullYear() + "/" + 
                 (date.getMonth() + 1) + "/" + // Months are 0 for January etc.
                 date.getDate();

Hinweis:

  • Das Format, in dem Sie den Wert in das Date -Objekt eingeben, ist wichtig. Sie möchten dies zuerst überprüfen.
  • Wenn wir das Ablaufdatum erstellen, wird dem Wert keine Nullen vorangestellt. 2012/12/09, es ist 2012/12/9

Oder Sie können eine Bibliothek wie vorgeschlagen verwenden

BEARBEITEN aktualisierter Code, um das Hinzufügen zum OP-Code zu vereinfachen

Alternative Ansätze Verwenden Sie einen Ereignishandler. Ich kann in Ihrem Code sehen, dass Sie jQuery verwenden, wenn Sie es einschließen, machen Sie das Beste daraus ...

$("#enddate").change(function() {
  var endDate = $(this).val();

  // Calculate expiry date
  var date = new Date(endDate);
  date.setMonth(date.getMonth() + 2);

  // Get date parts
  var yyyy = date.getFullYear();
  var m = date.getMonth() + 1;
  var d = date.getDate();

  $("#expirydate").val(yyyy + "/" + m + "/" + d);
});

Dies muss einige Zeit nach dem Bereitstellen des Dokuments in Ihrer Codezeile 441 ausgeführt werden, und das Enddatum wird so eingestellt, dass das Ablaufdatumfeld bei jeder Änderung aktualisiert wird. Wenn Sie es programmgesteuert ändern, müssen Sie den Änderungshandler möglicherweise manuell aufrufen

// Insert value programmatically
$("#enddate").val(newValue).change();

Andernfalls benötigen Sie eine Möglichkeit, einen Anfangswert an die Funktion displayCalendar zu übergeben. Ich habe keine Details zur Funktionsweise dieser Funktion, daher kann ich nicht am besten raten, wie dies geschehen könnte.

BEARBEITEN Die Funktion ist Teil des DHTMLGoodies JS-Kalenders von 2006, der onchange aufruft, aber mit jQuery nicht gut funktioniert. Sie müssen also die grundlegende onchange-Eigenschaft des Elements verwenden, das ersetzt den obigen jQuery-Code ...

document.getElementById("enddate").onchange = function() {
  var endDate = this.value;

  // Calculate expiry date
  var date = new Date(endDate);
  date.setMonth(date.getMonth() + 2);

  // Get date parts
  var yyyy = date.getFullYear();
  var m = date.getMonth() + 1;
  var d = date.getDate();

  document.getElementById("expirydate").value = yyyy + "/" + m + "/" + d;
}
0
Stuart Wakefield 9 Okt. 2012 im 13:40

Da Sie Ihrem aktuellen Datum 2 Monate hinzufügen möchten,

var d = new Date(year, month, day);
d.setMonth(d.getMonth() + 2);
0
Sibu 9 Okt. 2012 im 11:07

Ich denke, Sie müssen sich Datejs ansehen.

http://www.datejs.com/

Bibliothek, die die Javascript-Datumsfunktionalität erweitert.

Ermöglicht das Ausführen von Aufgaben wie: -

// Add 2 months to Today
Date.today().add(2).months();

Welches deckt so ziemlich Ihren Bedarf ab.

1
Paul Alan Taylor 9 Okt. 2012 im 10:59