Salut

Le hasard m'a fait découvrir un dysfonctionnement dans un bout de code écrit par moi (donc sujet à bug car je suis nouveau dans le langage javascript).

Si je rentre une date inférieur ou égal au 14/06/1940, toLocaleDateString() me donne pour réponse DATE - 1 jour, ???
let d = new Date($("#datepicker" ).datepicker("getDate"));;
// si d=14/06/1940, d.toLocaleDateString()=13/06/1940
// si d=15/06/1940, d.toLocaleDateString()=15/06/1940
// si d=14/06/1940, d.toLocaleDateString("en-GB")=13/06/1940
// si d=15/06/1940, d.toLocaleDateString("en-GB")=15/06/1940
// si d=14/06/1940, d.toLocaleDateString("fr-FR")=13/06/1940
// si d=15/06/1940, d.toLocaleDateString("fr-FR")=15/06/1940

Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<!doctype html>
<html lang="fr">
	<head>
		<meta charset="utf-8">
		<title>jQuery UI Sélecteur de date (Datepicker) - calendrier localisée Fr</title>
		<link rel="stylesheet" href="../bibliotheques local JS CSS/jquery-ui-1.12.1/jquery-ui.min.css">
		<script src="../bibliotheques local JS CSS/jquery.min.js"></script>
		<script src="../bibliotheques local JS CSS/jquery-ui-1.12.1/jquery-ui.min.js"></script>
		<link rel="stylesheet" href="jqueryui/style.css">
		<!-- <script src="http://jqueryui.com/resources/demos/datepicker/jquery.ui.datepicker-fr.js"></script> -->
 		<!-- http://api.jqueryui.com/datepicker/ -->
 
		<script>
                //*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*
                "use strict"; // force la déclaration des variables
                window.onload = loadon;
                //*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
                function loadon() {
                        for (let i = 1; i < 32; i++) {
                                let x = document.createElement("OPTION");
                                x.setAttribute("value", i);
                                let t = document.createTextNode(i);
                                x.appendChild(t);
                                document.getElementById("jour").appendChild(x);
                        }
                        for (let i = 1; i < 13; i++) {
                                let x = document.createElement("OPTION");
                                x.setAttribute("value", i);
                                let t = document.createTextNode(i);
                                x.appendChild(t);
                                document.getElementById("mois").appendChild(x);
                        }
                        //let d = new Date()
                        //let max = 2099 - d.getFullYear() + 1;// apparament le maxi est 31/12/2099 étant en 2018 .....
                        let max = 151;
                        //console.log(max);
                        for (let i = 1; i < max; i++) {
                                let x = document.createElement("OPTION");
                                x.setAttribute("value", i);
                                let t = document.createTextNode(i);
                                x.appendChild(t);
                                document.getElementById("ans").appendChild(x);
                        }
                        $("#datepicker" ).datepicker("setDate", new Date());
                        $("#datepicker" ).datepicker("show");
                }//*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-
                $(function() {
                        $("#datepicker").datepicker({
                                yearRange: "1900:2050",         // plage affichable de à
                                changeMonth: true,                      //Sélecteur de mois accessible
                                changeYear: true,                       //Sélecteur d'années accessible
                                altField: "#Result",            //boite d'affichage supplémentaire suivant altFormat
                                altFormat: "DD d MM yy",
                                firstDay: 1,                            //Nom du jour débutant la semaine (ici le lundi) 0 à 6 dimanche à samedi
                                closeText: 'Fermer',
                                prevText: 'Précédent',
                                nextText: 'Suivant',
                                currentText: 'Aujourd\'hui',
                                monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],
                                monthNamesShort: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'],
                                dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
                                dayNamesShort: ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'],
                                dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'],
                                weekHeader: 'Sem.',
                                dateFormat: 'dd/mm/yy'//'yy-mm-dd'
                        });
                });//*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
                function Calcul(){
                        // calcul date exacte, vérifié pour Dimanche 1 Décembre 1748 et le Dimanche 31 Janvier 2202
                        let d = new Date($("#datepicker" ).datepicker("getDate"));
                        let Jour = d.getDate();         // 1 à 31
                        let Mois = d.getMonth();        // 0 à 11 
                        let An = d.getFullYear();       // (yyyy)
 
                        let NbrJour, NbrMois, NbrAn;
                        if (document.getElementById("Action").value == 'plus'){
                                //Ajouter
                                NbrJour = Number($('#jour').val());
                                NbrMois = Number($('#mois').val());
                                NbrAn = Number($('#ans').val());
                                }else{
                                // Soustraire
                                NbrJour = Number(-$('#jour').val());
                                NbrMois = Number(-$('#mois').val());
                                NbrAn = Number(-$('#ans').val());
                        }
                // si d=14/06/1940, d.toLocaleDateString()=13/06/1940
                // si d=15/06/1940, d.toLocaleDateString()=15/06/1940
                // si d=14/06/1940, d.toLocaleDateString("en-GB")=13/06/1940
                // si d=15/06/1940, d.toLocaleDateString("en-GB")=15/06/1940
                // si d=14/06/1940, d.toLocaleDateString("fr-FR")=13/06/1940
                // si d=15/06/1940, d.toLocaleDateString("fr-FR")=15/06/1940
                        console.log('d=' + d + '    d.toLocaleDateString()=' + d.toLocaleDateString());
                        //console.log('d avant setFullYear = ' + d +  '    d.toLocaleDateString() = ' + d.toLocaleDateString());
                        d.setFullYear(An + NbrAn, Mois + NbrMois, Jour + NbrJour);
                        //console.log('d après setFullYear = ' + d +  '    d.toLocaleDateString() = ' + d.toLocaleDateString());
 
                        $("#d2" ).html("le <font color='blue'>" + d.toLocaleDateString() + "<font color='black'>    soit <font color='blue'>" + DatLng(d));
                //le 13/06/1940 soit Vendredi 14 Juin 1940
                //le 15/06/1940 soit   Samedi 15 Juin 1940
                }//*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-
                function DatLng(dat){
                        let d = new Date(dat);
                        let dayNames = $("#datepicker").datepicker("option", "dayNames");
                        let monthNames = $("#datepicker").datepicker("option", "monthNames");
                        return dayNames[d.getDay()] + " " + d.getDate()  + " " + monthNames[d.getMonth()] + " " + d.getFullYear();
                }//*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-
 
                </script>
	</head>
	<body>
 
		<p>Sélectionnez une date:
			<input type="text" id="datepicker" style="width:65px" onchange="Calcul()">
			&nbsp;
			<input type="text" id="Result" size="26">
		</p>
 
		<select id="Action" onclick="Calcul()">
			<option value="plus" selected >Ajouter<option value="moins">Soustraire
		</select>
		Jour(s):&nbsp;
		<select id="jour" onclick="Calcul()" Title="Jour">
			<option value="0" selected >0
		</select>
		Mois:&nbsp;
		<select id="mois" onclick="Calcul()" Title="mois">
			<option value="0" selected >0
		</select>
		An(s):&nbsp;
		<select id="ans" onclick="Calcul()" Title="année(s)">
			<option value="0" selected >0
		</select>
		<br><br>Résultat:
		<h2 id="d2"></h2>
 
	</body>
</html>
A noté que j'utilise des JS externe enregistré en local, cela me permet d'apprendre sans être forcément connecté à internet.

Mon code peut être essayé https://codepen.io/anon/pen/rpPRyQ?editors=1011

Je n'ai pas su trouver d'aide à travers mes différentes recherches.
N'hésitez pas à me corriger aussi quand à la rédaction du code

Merci.