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