2012-07-05 13 views
12

JavaScript zdecydowanie nie jest moją najmocniejszą stroną. Próbuję tego od kilku godzin i wydaje mi się, że utknąłem z formatowaniem daty.Jak dodać tygodnie do daty przy użyciu javascript?

Mam formularz, w którym użytkownik wybrał datę (dd/mm/rrrr), a następnie ta data zostanie podjęta i zostaną dodane 2 tygodnie, a następnie data zostanie skopiowana do innego pola formularza.

Moja ostatnia próba poniżej nie jest nawet dodawaniem daty, a jedynie kopiowaniem wybranej daty w jednym polu formularza na drugi, jeśli wybiorę "03/02/2012", wyświetli "Fri Mar 02 2012 00:00: 00 GMT + 0000 (GMT Standard Time) ", więc jego wyjście w formacie amerykańskim, jak również pełna data. Jak mogę to zrobić na tym samym formacie i dodać 2 tygodnie?

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

} 
+0

Lubię [że ans] (http://stackoverflow.com/a/7751977/1509853) – oCcSking

Odpowiedz

3

Ty przypisywania date1 być przedmiotem Data który reprezentuje ciąg przejechania go. To, co widzisz w wartości acceptLicense, to toString() reprezentacja obiektu daty (spróbuj alert(date1.toString()), aby to zobaczyć).

Aby wyprowadzać, jak chcesz, będziesz musiał użyć konkatenacji ciągów i various Date methods.

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

Pod względem dodania 2 tygodni należy dodać 14 dni do bieżącej daty;

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

... to automatycznie obsłużyć wzrost miesięczny itp

w końcu skończysz z;

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

N.B Miesiące w JavaScript są indeksowane (0 = 0 sty, Dec = 11), stąd +1 na miesiąc.

Edit: Aby rozwiązać swój komentarz, należy skonstruować date następująco zamiast, jak Date argumentem ma być „Ciąg reprezentujący dokument RFC2822 lub ISO 8601”. (see here).

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

Dzięki za odpowiedź, jeśli wybiorę '04/01/2012' (dd/mm/rrrr) wartość, którą otrzymuję w drugim polu to "15/4/2012" (dd/mm/rrrr), więc wydaje się, że wciąż dodaje 14 do miesiąca, a nie do dnia, lub więcej ely formatowanie wciąż jest złe. – JBoom

+0

Domyślam się, że to wymaga formatowania przed dodaniem 14 dni? ponieważ (date1.getDate() + 14) zakłada, że ​​jest sformatowany jako mm/dd/rrrr – JBoom

+0

@JBoom: Argument "Date" ma być "Ciągiem reprezentującym datę RFC2822 lub ISO 8601". ([patrz tutaj] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse)). Lepszym rozwiązaniem może być użycie innego konstruktora, który akceptuje rok, miesiąc, dzień jako oddzielne parametry (zobacz moją zmienioną odpowiedź). – Matt

0

To powinno zrobić to, czego szukasz.

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

Można to zrobić:

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

można zobaczyć na skrzypcach here.

Sposobem documentation in MDN

setDate() ustawia dzień miesiąca dla określonej dacie według czasu lokalnego.

+0

@Jasper - czy możesz podać przykład, który się nie powiedzie? W mojej odpowiedzi podałem link do kodu. –

-1

Wszystko jest there!

date1.toLocaleDateString() 

Thiswill powrót date1 jako ciąg w konwencji klienckiego

Aby utworzyć nową datę date2 z 2 tygodni więcej (2 tygodniowej = 2 * 7 * 24 * 60 * 60 sekund):

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

To jest to, co [toLocaleDateString'] (http://ecma-international.org/ecma-262/5.1/#sec-15.9.5.6) ** powinno, ale nie we wszystkich przeglądarkach (np. Chrome ignoruje moje ustawienia systemowe, podobnie jak ostatnie wersje, ale nie aktualną wersję Firefoksa). – RobG

0

Aby przeanalizować konkretny format dd/mm/yyyy i liczbę dni z 14, można zrobić coś takiego, jak podzielić części i utworzyć obiekt daty, podając odpowiednio y/m/d. (Zwiększając dni od razu) Zapewnienie separatora jest zawsze - następujące powinny działać:

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

tylko niektóre minimalne modyfikacje odpowiedź tosty i dostaniesz dokładny format szukasz dd/mm/rrrr:

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