0
votes

Comment ajouter 1 à l'année en cours


J'ai un problème JS et il se peut que je sois bloqué, mais peut-être que l'un de vous pourrait m'aider.

J'ai l'index suivant. html:

    function changeYear(){
var year = document.getElementById("year").innerHTML;
var year = year-1;
document.getElementById("year").innerHTML = year;
}
function changeYear2(){
var year2 = document.getElementById("year").innerHTML;
console.log(year2);
console.log(year2+1);
year2 = year2+1;
console.log(year2);
document.getElementById("year").innerHTML = year2;
}

qui charge init (). Cette fonction contient le code suivant:

    function init() {
var months = ["January", "February", "March", "April", "May", "June", 
"July", "August", "September", "October", "November", "December"];
let monthsextension = ["nothing"];
var months2 = monthsextension.concat(months); 
today = new Date();
var month2 = today.getMonth();
var year = today.getFullYear();
document.getElementById("month").innerHTML = months[month2];
document.getElementById("year").innerHTML = year;
displayC();
}

la fonction dispayC, a deux fonctions pour décompter ou décompter l'année:

    <!DOCTYPE html>
    <html lang="en">
<head>
    <title>Calendar</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="stylesheets/base.css">
    <link rel="stylesheet" href="stylesheets/content.css">
    <link rel="stylesheet" href="stylesheets/calendar.css">
    <script
        type="application/javascript"
        src="scripts/try.js">
    </script>
    <script src="scripts/jquery-3.3.1.min.js"></script>
</head>
<body 
    onload="init()">
    <div id="content"> 
        <div class="year">
            <ul>
                <li id="year">year</li>
                <li class="prev" id="prevmonth" onclick="changeYear()">&#10094;</li>
                <li class="next" id="nextmonth" onclick="changeYear2()">&#10095;</li>
            </ul>
        </div>
        <hr>
        <div class="month">
            <ul>
                <li id="month">month</li>
                <li class="prev" id="prevyear" onclick="changeMonth()">&#10094;</li>
                <li class="next" id="prevyear" onclick="changeMonth2()">&#10095;</li>
             </ul>
        </div>
    </div>
    <div id="calendar">
        <table id="tablecalendar">
        </table>
    </div>
</body>
</html>

maintenant, la fonction "changeYear" fonctionne comme je le voudrais, mais "changeYear2" n'ajoute pas 1 à l'année, mais ajoute le chiffre un à l'année.
Exemple:
«2019» devient «20191»
avec un deuxième clic sur la flèche du compteur, il devient "201911"

Comment se fait-il que je puisse soustraire mais ne pas ajouter à l'année?

J'espère que ce n'est pas trop de code, j'essaye de le réduire autant que possible.


2 commentaires

var year2 = document.getElementById ("year"). innerHTML; renvoie une chaîne. Convertissez-le en entier.


Copie possible de la fonction JavaScript pour ajouter X mois à une date


4 Réponses :


0
votes

L'opérateur - contraint les opérandes en nombre (il n'y a pas de soustraction de chaînes), l'opérateur + ne le fait pas (car pour les chaînes, + signifie concaténation).

console.log("7" - "2");
console.log("7" + "2");

parseInt que innerHTML , et cela fonctionnera.


0 commentaires

0
votes

dans var year2 = document.getElementById ("year"). innerHTML;

changez-le en

var year2 = parseInt (document.getElementById ("year"). innerHTML);

L'année2 est définie par défaut comme une chaîne qui, lorsque vous y ajoutez le nombre, l'ajoute simplement à la chaîne. Vous devez convertir la chaîne en un nombre via parseInt () (ou parseFloat (), etc.).


0 commentaires


0
votes

Il est si courant que les variables soient converties en chaînes en Javascript alors que vous ne vous attendez pas à ce qu'elles le soient. Chaque fois que vous soustrayez deux variables, Javascript est assez intelligent pour supposer que ce sont tous les deux des nombres. Lorsque vous ajoutez, cependant, Javascript ne sait pas s'il s'agit de nombres ou de chaînes (puisque l'opérateur + est utilisé pour les deux).

Vous pouvez toujours forcer une chaîne dans un nombre en faisant Number (year) + 1 ou en utilisant parseInt (year) + 1


3 commentaires

Ou, en faisant + année .


Merci beaucoup. C'est bizarre que je n'ai pas besoin de le convertir quand je soustrais, mais content que ça marche :)


C'est parce que Javascript est un langage mal typé et qu'il détermine si une variable est une chaîne ou un nombre au moment de l'exécution. Lorsqu'il voit deux variables avec un + entre elles, il ne peut pas savoir avec certitude si elles doivent être des chaînes ou des nombres car les deux peuvent utiliser l'opérateur + . Cependant, lorsqu'il voit un - , il sait qu'ils doivent être forcés en nombres car seuls les nombres peuvent utiliser l'opérateur - .