2012-07-05 4 views
12

Javascript ist definitiv nicht mein stärkster Punkt. Ich habe das jetzt für ein paar Stunden versucht und scheint irgendwo mit der Datumsformatierung zu hängen.Wie kann man Wochen mit Javascript hinzufügen?

Ich habe ein Formular, wo ein Benutzer ein Datum ausgewählt hat (TT/MM/JJJJ) und dann dieses Datum wird genommen und 2 Wochen werden hinzugefügt und dann wird das Datum in ein anderes Formularfeld kopiert.

Mein letzter Versuch unten ist noch nicht einmal ein Datum hinzufügen noch kopieren Sie das ausgewählte Datum in einem Formularfeld in ein anderes, wenn ich '03/02/2012 ', es gibt' Fr Mar 02 2012 00:00: 00 GMT + 0000 (GMT-Standardzeit), so dass die Ausgabe im amerikanischen Format sowie das vollständige Datum erfolgt. Wie bekomme ich es raus in das selbe Format und füge 2 Wochen hinzu?

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var date1 = new Date(acceptCompletionDate); 
    document.frmAccept.acceptLicence.value = date1; 

} 
+0

ich mag [das am] (http://stackoverflow.com/a/7751977/1509853) – oCcSking

Antwort

3

Sie date1 zuweisen ein Date-Objekt sein, die repräsentiert die Zeichenfolge Sie es passieren. Was Sie in der acceptLicense Wert sehen, ist die toString() Darstellung des Datumsobjekts (versuchen Sie alert(date1.toString()), um dies zu sehen).

Zur Ausgabe wie Sie wollen, müssen Sie Zeichenfolge Verkettung und die various Date methods verwenden.

var formattedDate = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear(); 

In Bezug auf das Hinzufügen von 2 Wochen sollten Sie 14 Tage zum aktuellen Datum hinzufügen;

date1.setDate(date.getDate() + 14); 

... dies wird den Monat Anstieg usw.

Am Ende automatisch handhaben, werden Sie sich mit Ende zu setzen;

var date1 = new Date(acceptCompletionDate); 
date1.setDate(date1.getDate() + 14); 
document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear(); 

N. B Monate in JavaScript sind 0-indiziert (Jan = 0, Dezember = 11), daher die +1 auf dem Monat.

bearbeiten: Kommentar begegnen, sollten Sie date konstruieren wie folgt statt, wie das Date Argument sein soll „Eine Zeichenfolge, die eine RFC2822 oder ISO 8601 Datum.“ (see here).

var segments = acceptCompletionDate.split("/"); 
var date1 = new Date(segments[2], segments[1], segments[0]); 
+0

Vielen Dank für Ihre Antwort, wenn ich '04/01/2012' (tT/mM/select yyyy) Der Wert, den ich in dem anderen Feld bekomme, ist '15/4/2012 '(TT/MM/JJJJ), also scheint es immer noch 14 zu dem Monat hinzuzufügen anstatt den Tag oder mehr Die Formatierung ist irgendwo noch falsch. – JBoom

+0

Ich denke, es muss formatiert werden, bevor die 14 Tage hinzugefügt werden? da das (date1.getDate() + 14) davon ausgeht, dass es wie folgt formatiert ist: mm/tt/jjjj – JBoom

+0

@JBoom: 'Datum' Argument soll sein" Eine Zeichenkette, die ein RFC2822- oder ISO 8601-Datum darstellt. " ([Siehe hier] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse)). Es könnte besser sein, den anderen Konstruktor zu verwenden, der Jahr, Monat, Tag als separate Parameter akzeptiert (siehe meine bearbeitete Antwort). – Matt

0

Dies sollte tun, was Sie suchen.

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var date1 = new Date(acceptCompletionDate); 
    date1.setDate(date1.getDate() + 14); 
    document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear(); 
} 
42

Sie können dies tun:

var now = new Date(); 
now.setDate(now.getDate()+14); 
alert(now); 

Sie die Geige sehen here.

Nach der documentation in MDN

Die setDate() Methode setzt den Tag des Monats für ein bestimmtes Datum nach Ortszeit.

+0

@Jasper - können Sie mir ein Beispiel geben, das scheitert? Ich habe einen Link zu dem Code in meiner Antwort angegeben. –

-1

Alles ist there!

date1.toLocaleDateString() 

Thiswill Sie zurückkommen date1 als String in der Client-Konvention

Um ein neues Datum date2 mit 2 Wochen mehr (2 Wochen = 2 * 7 * 24 * 60 * 60 Sekunden) zu erstellen:

var date2 = new Date(date1 + 60*60*24*7*2); 
+0

Das sollte [toLocaleDateString'] (http://ecma-international.org/ecma-262/5.1/#sec-15.9.5.6) ** tun **, tut es aber nicht in allen Browsern (zB Chrome ignoriert meine Systemeinstellungen, ebenso die letzten Versionen, aber nicht die aktuelle Version von Firefox). – RobG

0

Um das spezifische dd/mm/yyyy Format zu analysieren und Tage mit 14 zu erhöhen, können Sie etwas wie die Teile teilen und das Datumsobjekt mit spezifizierten y/m/d erstellen. (Die Tage sofort Inkrementieren) Die Bereitstellung der Separator ist immer -, sollte folgende Arbeiten:

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var parts = acceptCompletionDate.split("/"); 
    var date1 = new Date(parts[2], (parts[1] - 1), parseInt(parts[0]) + 14); //month 0 based, day: parse to int and increment 14 (2 weeks) 
    document.frmAccept.acceptLicence.value = date1.toLocaleDateString(); //if the d/m/y format is the local string, otherwise some cusom formatting needs to be done 

} 
0

einfach ein paar minimale Änderungen an Toast Antwort, und Sie werden das genaue Format der Sie suchen tt/mm/jjjj bekommen:

function LicenceToOccupy(acceptCompletionDate) 
{ 
    var date1 = new Date(acceptCompletionDate); 
    date1.setDate(date1.getDate() + 14); //This adds the two weeks 

    var day = date1.getDate() 9 10 ? date1.getDate() : '0' + date1.getDate(); 
    var month = date1.getMonth() >= 9 ? date1.getMonth() + 1: '0' + date1.getMonth(); 

    document.frmAccept.acceptLicence.value = day + '/' + month + '/' + date1.getFullYear(); 
}