Disparition temporaire

Fermé
chabinot Messages postés 322 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 27 août 2024 - 27 janv. 2023 à 19:02
chabinot Messages postés 322 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 27 août 2024 - 28 janv. 2023 à 17:01

Bonjour,

Voilà un bout de source 

// Language locale (fr)
moment.locale('fr-FR')

// Constantes
const now    = moment(),
timeElement  = document.querySelector('.time'),
dateElement  = document.querySelector('.date'),
dayElement   = document.querySelector('.day'),
weekElement  = document.querySelector('.week'),
resteElement = document.querySelector('.reste'),
cpyElement   = document.querySelector('.cpy'),
isLeap       = moment([moment().format('YYYY')]).isLeapYear()

// Heure
setInterval( () => {
  timeElement.textContent = moment().format('hh:mm:ss a')
}, 1000)

// Nombre de jours restant
const reste = () => {
 let restant = (isLeap ? 366 : 365) - now.format('DDD')
 console.log(isLeap)
 return restant === 0 ? '(Dernier jour de l\'année)'
                      : (restant === 1 ? '(Reste 1 jour)' : '(Reste: ' + restant + ' jours)')
}

// Date du jour
dateElement.textContent  = now.format('dddd DD MMMM YYYY')

// Jour dans l'année en cours
dayElement.textContent   = `${now.format('DDD').toString().padStart(2, "0")}`

// Semaine dans l'année en cours
weekElement.textContent  = `${now.format('w').toString().padStart(2, "0")}`

// Nombre de jours restant
resteElement.textContent = reste()

// Copyright
cpyElement.textContent    = now.format('YYYY')

Lorsque je réaffiche la page (F5), l'heure affichée disparaît momentanément.
Est-ce normal ? et comment y remédier ?

Cordialement

2 réponses

jordane45 Messages postés 38423 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 15 février 2025 4 734
27 janv. 2023 à 20:22

Bonjour

Tout dépend le reste de ta page, mais pense bien que le javascript s'exécute après que la page a été chargée comme en plus tu utilises un timer forcément ça rajoute du temps

Pour peu que tu aies d'autres scripts qui se charge avant celui-là ça rajoute également du temps..

Je précise également que la librairie moment mais, il me semble, plus maintenu à cause de failles de sécurité qui ont été trouvées à l'intérieur...

Si c'est juste pour afficher l'heure, les fonctions natives de JavaScript suffisent largement.


0
chabinot Messages postés 322 Date d'inscription mardi 10 novembre 2015 Statut Membre Dernière intervention 27 août 2024 16
28 janv. 2023 à 17:01

Bonjour,

Effectivement, je l'ai refait, le voici :

// Constantes
const now    = new Date(),
dateElement  = document.querySelector('.date'),
dayElement   = document.querySelector('.day'),
weekElement  = document.querySelector('.week'),
resteElement = document.querySelector('.reste'),
timeElement  = document.querySelector('.time'),
cpyElement   = document.querySelector('.cpy'),
options      = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }

// Date du jour
dateElement.innerText = now.toLocaleDateString('fr-FR', options)

// Jour dans l'année en cours
const dayOfYear = date =>
  Math.floor((now - new Date(now.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24)
  dayElement.textContent = dayOfYear(now).toString().padStart(2, '0')

// Semaine dans l'année en cours
const weekOfYear = date => {
  const startOfYear = new Date(now.getFullYear(), 0, 1);
  startOfYear.setDate(startOfYear.getDate() + (startOfYear.getDay() % 7));
  return Math.round((now - startOfYear) / (7 * 24 * 3600 * 1000));
}
weekElement.innerText = weekOfYear(now).toString().padStart(2, '0')

// Année bisextile
const isLeap = year => new Date(year, 1, 29).getDate() === 29
let nbJour = isLeap(now.getFullYear()) ? 366 : 365,
restant = nbJour - dayOfYear(now)
// Nombre de jours restant est supérieur à 1 ou égale à 0
resteElement.innerText = (restant === 0 
                                  ? '(Dernier jour de l\'année)'
                                  : (restant === 1) 
                                  ? '(Reste: ' + restant + ' jour)'
                                  : '(Reste: ' + (nbJour - dayOfYear(now)).toString().padStart(1, '0') + ' jours)')

// Copyright
cpyElement.textContent    = now.getFullYear()

// Affichage de l'heure
setInterval( () => {
  const hour = ((new Date().getHours() % 12) || 12).toString().padStart(2, '0'),
  minute   = new Date().getMinutes().toString().padStart(2, '0'),
  second   = new Date().getSeconds().toString().padStart(2, '0'),
  amOrPm   = new Date().getHours() < 12 ? 'am' : 'pm'
  
  timeElement.innerText = `${hour}:${minute}:${second} ${amOrPm}`
}, 1000)

et la page html 

<!DOCTYPE html>
<html lang="fr">
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>Document</title>
		<!-- Favicon -->
		<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
		<!-- Styles CSS -->
		<link rel="stylesheet" href="css/styles.css">
		<!-- Scripts -->
		<script src="js/date.time.js" defer></script>
	</head>
	<body>
		
		<header class="fixed-top">
			<div class="datetime">
				<span class="date"></span><br>
				<span>(Jour: </span><span class="day"></span><span>)</span>
				<span>(Semaine: </span><span class="week"></span><span>)</span><br>
				<span class="reste"></span><span></span>
			</div>
			<div class="titre"><h1><a href="/">Document</a></h1></div>
			<div class="time">
				<span class="time"></span>
			</div>
		</header>
		
		<footer class="fixed-bottom">
			<p>&copy; Copyright Document (2022 - <span class="cpy"></span>). Tous droits réservés </p>
		</footer>
		
	</body>
</html>

Comme tu vois, je n'ai qu'un seul script, ça continue au réaffichage, ce n'est pas grave.

Merci encore pour ton aide.

0