1
votes

Comment puis-je utiliser la date de type d'entrée pour n'autoriser dynamiquement qu'un an à compter de la date actuelle?

Voici mon code pour l'instant. Je ne sais pas comment accomplir une date maximale autre que la définition de celle-ci dans la balise d'entrée elle-même. Je veux qu'il soit dynamique donc quelle que soit la date actuelle, le calendrier ne permet qu'une sélection d'un an maximum.

$(function(){
    var dtToday = new Date();

    var month = dtToday.getMonth() + 1;
    var day = dtToday.getDate();
    var year = dtToday.getFullYear();
    if(month < 10)
        month = '0' + month.toString();
    if(day < 10)
        day = '0' + day.toString();

    var maxDate = dtToday + 365;
    alert(maxDate);
    $('#txtDate').attr('max', maxDate);
});
<input type="date" id="txtDate" />

exemple: aujourd'hui est le 01/10/2019, il ne devrait être autorisé à sélectionner que le 10/1 / 2019-10 / 1/2020 demain l'utilisateur doit être autorisé à sélectionner uniquement du 10/2 / 2019-10 / 2/2020 lien vers le violon


8 commentaires

Copie possible de Restreindre les dates futures dans la saisie de date HTML 5


@ShayaUlman cela ne semble pas être un doublon. La question concerne la définition d'une date de fin dynamique


@ControlAltDel oui exactement. Je souhaite uniquement autoriser une sélection de date à partir de la date actuelle + 1 an à partir du jour actuel


Voilà: jsfiddle.net/khrismuc/qf32ync0 (c'est une dupe de cette question btw, mais la réponse acceptée n'utilise pas les bonnes pratiques pour créer la chaîne max )


@ControlAltDel, la réponse acceptée là-bas semble répondre à cette question, qu'en est-il?


oui c'est parfait, mais comment puis-je interdire toutes les dates commençant avant la date actuelle?


@Abigail vient de définir minDate avec le jour, le mois et l'année de la nouvelle date ()


@ShayaUlman Oui, cela couvre la partie de la date maximale


4 Réponses :


-1
votes

Vous ne pouvez pas ajouter à un objet de date comme celui-ci; vous devez d'abord l'obtenir sous forme d'horodatage. Vous pouvez le faire en utilisant Date.now () ou, si vous avez besoin de l'objet Date, dtToday.getTime () .

Cela vous donne un horodatage en millisecondes, vous devez donc également convertir 365 jours en millisecondes; ce qui signifie que vous voulez y ajouter 365 * 24 * 60 * 60 * 1000 , pas seulement 365.


2 commentaires

merci cela a du sens mais pouvez-vous mettre à jour violon s'il vous plaît?


Vous pouvez ajouter des jours ou des millisecondes à une date. Le moyen le plus simple est d'ajouter 1 an, qui tient également compte des années bissextiles (à condition d'accepter les règles ECMAScript pour ajouter une année au 29 février): date.setFullYear (date.getFullYear () + 1) .



0
votes

Ajoutez simplement une année à la date actuelle

var dtToday = new Date();
dtToday.setYear(dtToday.getYear() + 1);


1 commentaires

Je ne veux pas non plus avoir la possibilité de sélectionner une date si elle est antérieure à la date actuelle ou plus d'un an après la date actuelle



0
votes
$(function(){
  var dtToday = new Date();
  dtToday.setFullYear(dtToday.getFullYear() + 1)
  let formatted_date = dtToday.getFullYear() + "-" + (dtToday.getMonth() + 1) + "-" + dtToday.getDate()
  alert(formatted_date);
  $('#txtDate').attr('max', formatted_date);
});

6 commentaires

mais comment puis-je interdire la sélection d'une date dépassant 1 an à partir de la date actuelle?


Il suffit de soustraire 1 au lieu d'ajouter et de définir l'attribut min: comme ceci


@Abigail Si vous voulez interdire les dates passées, définissez min = date actuelle


Mais ne serait-ce pas une date minimale statique? Je veux qu'il se mette à jour dynamiquement au fil des jours


Les réponses basées uniquement sur le code sont considérées comme de mauvaise qualité: @James Dullat - assurez-vous de fournir une explication sur ce que fait votre code et comment il résout le problème.


Merci @ help-info.de de me l'avoir fait savoir



0
votes

La définition des valeurs minimale et maximale pour une entrée de date basée sur la date du jour peut être effectuée lorsque la page se charge:

<input type="date" id="i0">
// Formt date as YYYY-MM-DD
function formatISOLocal(d) {
  let z = n => ('0' + n).slice(-2);
  return d.getFullYear()+'-'+z(d.getMonth()+1) + '-' + z(d.getDate());
}

window.onload = function() {
  let inp = document.querySelector('#i0');
  let d = new Date();
  inp.min = formatISOLocal(d);
  inp.defaultValue = inp.min;
  d.setFullYear(d.getFullYear() + 1);
  inp.max = formatISOLocal(d);
  // Debug
  console.log(inp.outerHTML);
}

Si l'agent utilisateur ne prend pas en charge la date de type d'entrée, cela définira toujours les valeurs min / max / par défaut, mais vous devrez gérer vous-même les valeurs hors limites.

p>


2 commentaires

hey existe-t-il un moyen d'utiliser ce script pour plusieurs champs de saisie de type date? jsfiddle.net/eLp8n9d6/5


Oui. Si vous avez une autre question, postez-la comme question. ;-)