2017-10-13 1 views
0

Dans mon programme javascript, j'essaie de calculer les années de naissance. J'ai créé des boîtes de dialogue rapides qui acceptent différentes valeurs et j'affiche ces valeurs mais les valeurs du mois données par l'utilisateur ne s'affichent pas correctement en deuxième ligne. l'utilisateur a entré 8 et il montre Octobre. Quelqu'un peut-il m'aider à identifier un problème? Comment devrais-je obtenir des valeurs toutes les trois valeurs de l'invite pour calculer l'année de naissance?Comment obtenir le nom du mois à partir de l'invite en utilisant l'objet Date, puis calculer le prochain anniversaire

code:

var today = new Date(); 
 

 
var monthNames = ["January", "February", "March", "April", "May", "June", 
 
    "July", "August", "September", "October", "November", "December" 
 
]; 
 

 
var birth = new Date(); 
 

 
var myMonth = prompt("What month were you born in?"); 
 
var myDay = prompt("What day were you born on?"); 
 
var myYear = prompt("What year were you born in?"); 
 

 
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; 
 
var dateLoc = document.getElementById("dateField").innerHTML = "Today is " + today; 
 

 
var birthField = document.getElementById("birthField") 
 
    .innerHTML = "I was born on " + monthNames[birth.getMonth()] + ' ' + myDay + ',' + myYear + '.' + 
 
    '(' + myMonth + '/' + myDay + '/' + myYear + ')'; 
 

 

 
var secondsBetween = (endDate.getTime() - startDate.getTime())/1000 
 
endDate = new Date(today.getFullYear() + 1, myMonth, myDay); 
 
var nextBirth = document.getElementById("nextBirth").innerHTML = "I am" + endDate + "Years old, and will turn"+ +"in" ;
<p id="dateField"> </p> 
 
<p id="birthField"> </p> 
 
<p id="nextBirth"> </p>

sortie:

enter image description here

+2

Vous affichez le nom du mois avec 'monthNames [birth.getMonth()]', mais 'birth.getMonth()' n'a aucune connexion avec le mois que l'utilisateur a saisi. – nnnnnn

+0

Il s'agit du mois en cours sous la forme 'new Date();' crée un objet date avec la date réelle. Vous avez besoin de quelque chose comme 'naissance = nouvelle Date (myYear, myMonth, myDay)' – Eineki

Répondre

2

Le problème est que birth.getMonth() retourne simplement le mois en cours , comme birth est simplement mis à new Date(). Comme nous sommes en octobre, vous obtiendrez toujours October.

Au lieu de cela, vous cherchez à accéder à l'index fourni par l'utilisateur avec monthNames[myMonth - 1]. La soustraction de 1 est nécessaire car l'index commence à zéro et les mois commencent à un. Pour avoir le haut de show mois correct, entrez simplement le numéro du mois dans l'exemple suivant:

var today = new Date(); 
 

 
var monthNames = ["January", "February", "March", "April", "May", "June", 
 
    "July", "August", "September", "October", "November", "December" 
 
]; 
 

 
var birth = new Date(); 
 

 
var myMonth = prompt("What month were you born in?"); 
 
var myDay = prompt("What day were you born on?"); 
 
var myYear = prompt("What year were you born in?"); 
 

 
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; 
 
var dateLoc = document.getElementById("dateField").innerHTML = "Today is " + today; 
 

 
var birthField = document.getElementById("birthField") 
 
    .innerHTML = "I was born on " + monthNames[myMonth - 1] + ' ' + myDay + ',' + myYear + '.' + 
 
    '(' + myMonth + '/' + myDay + '/' + myYear + ')';
p { 
 
    text-align: center; 
 
    font-family: monospace; 
 
    font-size: 20px; 
 
}
<p id="dateField"> </p> 
 
<p id="birthField"> </p> 
 
<p id="nextBirth"> </p>

Hope this helps! :)

+0

Je ... j'essaie de calculer les années de naissance comme indiqué dans le code, mais ça ne marche pas. Pourriez-vous me suggérer une solution? – pari

+0

C'est un [** problème XY **] (https: // meta.stackexchange.com/a/66378); quelque chose de différent de ce que vous demandiez initialement. Combiner les deux questions le rendrait ** trop large **, ce qui signifierait que la question serait considérée comme «[** hors-sujet **] (http://stackoverflow.com/help/dont-ask)» pour StackOverflow. Veuillez diviser chaque point en une action spécifique, et posez chacun d'eux comme une nouvelle question individuelle. Vous pouvez créer un lien vers cette question avec [** ce lien **] (https://stackoverflow.com/questions/46721303) dans la nouvelle question si cela vous aide à expliquer votre point :) –

+0

@Age Puis-je poser entièrement une nouvelle question? lié à ce programme? – pari

3

Vous avez un problème avec monthNames[birth.getMonth()], essayez monthNames[myMonth - 1] place:

var birthField = document.getElementById("birthField") 
    .innerHTML = "I was born on " + monthNames[myMonth - 1] + ' ' + myDay + ',' + myYear + '.' 
    + '(' + myMonth + '/' + myDay + '/' + myYear + ')'; 

Octobre est le nom du mois en cours, il est donc dû à birth = new Date()

Votre prochain anniversaire pourrait être obtenu par (monMois - 1)/myDay/(année aujourd'hui + 1). Ensuite, pour calculer secondes entre deux dates, vous pouvez utiliser

var secondsBetween = (endDate.getTime() - startDate.getTime())/1000 

Cela signifie que vous devez convertir la date d'entrée du javascript date. Dans votre cas (juste après specification), il est assez simple:

endDate = new Date(today.getFullYear() + 1, myMonth - 1, myDay); 
+0

Merci ................. – pari

+0

Ohh oui c'était mon erreur je soustrais à tort – pari

+0

J'ai un plus de doute. Comment devrais-je calculer les années de naissance, les jours, les heures, les minutes et les secondes jusqu'au prochain anniversaire? Comme nous ne pouvons pas donner de date directement, cela dépend de l'utilisateur. Alors, comment dois-je faire? – pari