web-dev-qa-db-fra.com

Comment ajouter des semaines à ce jour en utilisant javascript?

Javascript n'est certainement pas mon point fort. Cela fait quelques heures que j'essaie de le faire et je semble être coincé quelque part avec le formatage de la date.

J'ai un formulaire où un utilisateur a choisi une date (jj/mm/aaaa), puis cette date sera prise et 2 semaines y seront ajoutées et la date sera ensuite copiée dans un autre champ de formulaire.

Ma dernière tentative ci-dessous ne correspond même pas à l'ajout d'une date, mais consiste simplement à copier la date sélectionnée dans un champ de formulaire à un autre. Si je sélectionne '03/02/2012 ', le résultat est' Ven mars 02 2012 00:00:00 GMT + 0000 (GMT Standard Time) ', ainsi sa sortie au format américain ainsi que la date complète. Comment puis-je le faire mettre dans le même format et ajouter 2 semaines?

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

}
17
JBoom

Tu peux le faire : 

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

Vous pouvez voir le violon ici

Selon le documentation dans MDN

La méthode setDate () définit le jour du mois pour une date spécifiée selon l'heure locale.

58
Arvind Sridharan

Vous attribuez date1 à un objet Date qui représente la chaîne que vous le transmettez. Ce que vous voyez dans la valeur acceptLicense est la représentation toString() de l'objet date (essayez alert(date1.toString()) pour voir cela).

Pour obtenir le résultat souhaité, vous devez utiliser la concaténation de chaînes et les méthodes diverses Date .

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

En termes d’ajout de 2 semaines, vous devez ajouter 14 jours à la date actuelle;

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

... cela gérera automatiquement l'augmentation du mois, etc.

En fin de compte, vous allez vous retrouver avec;

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

N.B Les mois en JavaScript sont indexés sur 0 (Jan = 0, Dec = 11), d'où le +1 du mois.

Edit: pour adresser votre commentaire, vous devez plutôt construire date comme suit, car l'argument Date est censé être "Une chaîne représentant une date RFC2822 ou ISO 8601". ( vois ici ). 

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

Cela peut ne pas répondre à la question en soi, mais on peut trouver une solution avec ces formules.

6.04e+8 = 1 semaine en millisecondes

Date.now() = Maintenant, en millisecondes

Date.now() + 6.04e+8 = 1 semaine à compter d'aujourd'hui

Date.now() + (6.04e+8 * 2) = 2 semaines à compter d'aujourd'hui

new Date( Date.now() + (6.04e+8 * 2) ) = Date Object pour 2 semaines à compter d'aujourd'hui

1
Luis

Quelques modifications au minimum à la réponse de Toast et vous obtiendrez le format exact que vous recherchez jj/mm/aaaa :

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

Cela devrait faire ce que vous cherchez.

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

Pour analyser le format dd/mm/yyyy spécifique et incrémenter les jours avec 14, vous pouvez effectuer une opération similaire à la division des pièces et créer l'objet date avec une spécification spécifiée y/m/d. (incrémentant les jours tout de suite) Si le séparateur est toujours -, les éléments suivants devraient fonctionner:

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
Me.Name