Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site
JavaScript est un langage orienté objet c'est à dire que ce langage dispose d'objets.
Un objet est une entité qui possède des propriétés et peut être manipulée avec des méthodes ; une méthode est une fonction spécifique à un objet. Un objet est obtenu grâce à un constructeur.
JavaScript est riche en objets prédéfinis (ou natifs) que je vais présenter dans ce chapitre.
On utilise le "constructeur" Date avec le mot réservé new pour créer une nouvelle "instance de
la "classe Date". On peut dire plus simplement "créer un objet de type date" Ou encore "créer une date & heure".
N'oubliez pas le "D" majuscule à "Date" pour bien préciser qu'il s'agit d'un constructeur.
Le constructeur Date() sans argument retourne l'instant présent.
Sinon il faut argumenter dans l'ordre : année, mois, jour, [heure, minute seconde]) ;
les arguments entre crochets sont facultatifs.
Attention le rang du mois doit être un entier compris entre 0 et 11. Donc si le mois est "janvier" il faut saisir 0
et 11 pour "décembre !
L'argument de Date() peut être aussi un TimeStamp : nombre de millisecondes depuis le 1er janvier 1970 à 0 heure.
Le constructeur Date() produit toujours une date réaliste : voir rendu du script.
Pour la dernière date, il n'y a pas affichage du "30 février 2019" (date qui n'exite pas) mais du "2 mars 2019".
Testez dans la console cette série d'instructions JS :
var jour4 = Date(); console.log(jour4); console.log(typeof jour4); console.log(jour4.getFullYear());
J'ai oublié le mot clé "new" devant "Date()".
La variable "jour4" est considérée comme de type string et la dernière instruction "plante" .
Donc n'oubliez pas le mot clé "new" !
JavaScript propose une multitude de méthodes pour interroger une date.
Utilisons la console pour nous familiariser avec la syntaxe relative à cet objet.
Console utilisée le samedi 4 juin 2022.
> cejour = new Date() Sat Jun 04 2022 13:21:28 GMT+0200 (heure d’été d’Europe centrale) > cejour.getFullYear() 2022 > cejour.getDay() 6 > cejour.getMonth() 5 > cejour.getDate() 4 > cejour.getTime() 1654341688159 > cejour.getYear() 122 > cejour.getHours() 13 > cejour.getMinutes() 21 > cejour.getSeconds() 28
Nous avons donc utilisé des méthodes "getter" c'est à dire des méthodes pour récupérer des infos sur une instance de l'objet Date.
Il existe aussi les méthodes "setter" . Vous avez entre autres : setFullYear(), setMonth(), setDate(), setHours(), etc.
Console du navigateur utilisée le dimanche 16 avril 2023 vers 22 heures :
>cejour = new Date() Sun Apr 16 2023 22:09:28 GMT+0200 (heure d’été d’Europe centrale) >cejour.toLocaleDateString() '16/04/2023' >cejour.toDateString() 'Sun Apr 16 2023' >cejour.toLocaleTimeString() '22:09:28'
Les méthodes toLocaleDateString() & toLocaleTimeString() sont particulièrment intéressantes pour afficher une date ou une heure dans un format compréhensibles pour un francophone.
Il serait préférable d'afficher le mois en toutes lettres et le nom du jour (dimanche, lundi, ...). C'est possible en combinant des méthodes "getter" avec des tableaux indicés.
var mois = new Array("janvier", "février", "mars", "avril","mai", "juin", "juillet", "aout","septembre", "octobre", "novembre", "décembre"); var jours = new Array("dimanche","lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"); var aujourdhui = new Date(); var annee = aujourdhui.getFullYear(); var rang_mois =aujourdhui.getMonth(); var nom_mois = mois[rang_mois]; var jour = aujourdhui.getDate(); var type_jour =aujourdhui.getDay(); var nom_jour = jours[type_jour]; document.write('nous sommes le : ' + nom_jour + " " + jour + " " + nom_mois + " " + annee); var heure = aujourdhui.getHours(); var minutes = aujourdhui.getMinutes(); document.write('et il est très exactement : ' + heure + ' heures et ' + minutes + ' mn') ;
Le rang du mois et le type de jour (sous forme d'indices) sont convertis en chaines grâce aux tableaux indicés.
Si "rang_mois" vaut 4 alors "nom_mois" retourne "mai".
Si "type_jour" vaut 0 alors "nom_jour" retourne "dimanche".
La nature du jour et le mois apparaissent sous forme textuelle grâce à l'emploi de tableaux indicés.
EMACScript16 propose désormais le constructeur Intl.DateTimeFormat pour formater proprement et rapidement des dates.
Donc le recours aux "array" comme ci-dessus devient inutile.
hour12 vaut false / true pour afficher l'heure sur 24 heures (ou 12 heures).
Les propriétés weekday, year, month, day, hour, minute, second peuvent avoir comme valeur : "numeric", "long", "short" ou "2-digit".
Constatez que l'instant présent apparait sous un format très clair pour un francophone.
Le mois et le type de jour apparaissent sous forme textuelle car j'ai utilisé la valeur "long" pour les propriétés month & weekday
Pour actualiser la date & heure régulièrement il suffirait d'intégrer le code JS dans une fonction et ladite
fonction appelée régulièrement grâce à une instruction basée sur setInterval(nomFonction, fréquence d'appel).
var ladate = new Date(annee, mois+6,30, heure+1,0,0) ; : cette instruction construit une nouvelle date à partir de la date du jour ; 6 mois plus tard, le 30 du mois et une heure plus tard.
La différence entre deux instances de Date donne le nombre de millisecondes entre ces deux instants.
Je suis né le 19 février 1953 donc : new Date(1953,1,19) ; le mois de février à l'indice 1.
Pour calculer l'âge en années et mois, c'est un peu plus compliqué ...
Pour créer un objet String (une chaine) vous pouvez utiliser le constructeur String mais en général on préfère créer une variable de type string avec la syntaxe : let/const nomVariable ="suite de caractères alphanumériques"
Une chaine est délimitée obligatoirement par des guillemets simples ou doubles. Il faut utiliser le même délimiteur en début et
fin de chaine.
Si la chaine contient une apostrophe il faut délimiter celle-ci par des guillemets doubles à moins d'échapper l'apostrophe.
Exemples de chaines correctes :
let voyelles ='aeiouy'
let consonnes = "bcdfghjklmnpqrstvwxz"
let surnom = "l'emmerdeur"
let pseudo = 'l\'emmerdeur'
var message = new String("bonjour");
Tous les objets string ont été créés de façon littérale sauf le dernier (créé avec le constructeur String).
Il est possible d'écrire une chaine sur plusieurs lignes à condition qu'elle soit délimitée par des
accents graves ("backquotes" en anglais).
Pour produire un "backquote" composez altgr + 7
Si la chaine multilignes contient un accent grave, il faudra 'échapper" celui-ci.
La méthode indexOf() possède un deuxième argument (facultatif) qui précise à partir de quelle position doit commencer
la recherche de
la sous chaîne passée en premier argument.
Je vous rappelle que la méthode indexOf() retourne -1 si elle n'a pas trouvé la sous chaîne dans la chaîne.
Donc si la chaîne saisie comprend un arobase et un point après l'arobase alors les variables rang_arobase et rang_point
contiennent un entier supérieur à -1 (supérieur ou égal à zéro).
Le rendu :
Emploi des méthodes indexOf() & include().
Le script devient alors :
... mail.onblur = function() { var contenu = mail.value; var rang = contenu.indexOf('@') ; // position de @ if (rang >=0 && contenu.includes('.' ,rang)) message = 'adresse mail correcte' ; else message = 'adresse mail incorrecte'; document.getElementById('message').innerHTML = message ; } ...
La méthode includes() retourne un booléen et admet en deuxième argument le rang de départ de la recherche.
Le rendu :
Vous pouvez aussi utiliser "l'artillerie lourde" : comparer la saisie à un objet de type RegExp.
Je n'en dis pas plus et vous renvoye au chapitre ad hoc.
Les expressions régulières OU objets de type RegExp
Notez l'emploi d'un "template string".
Remarquez l'astuce JS pour produire le contenu de la boite DIV identifiée "contenu" : chaque passage dans la boucle
crée une ligne de ce futur contenu dans une variable du même nom.
C'est une solution plus élégante que l'emploi de la méthode document.write(expression)
Par contre l'emploi du gestionnaire d'évènement HTML est désormais déconseillé : mélange de HTML et JS dans une
même instruction.
Solution : emploi du gestionnaire d'événement JS et d'une fonction anonyme :