Voir le flux RSS

danielhagnoul

Comment puis-je déterminer, pour une date donnée, si c'est la nuit ou le jour ?

Noter ce billet
par , 24/08/2018 à 22h01 (962 Affichages)
Nous utiliserons, bien entendu, l'incontournable moment.js : https://momentjs.com/

Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/locale/fr.js"></script>

Les explications sur ce sujet existent, mais elle se trouve dans les profondeurs de la documentation anglaise.

Il suffit de définir la fonction locale méridien en fonction de vos besoins

Code JavaScript : 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
moment.locale('fr');
 
moment.updateLocale('fr', {
    meridiem: function (hours) {
        if (hours >= 7 && hours <= 21) { // Jour entre 7 h et 21 h
            return 'jour';
        } else { // Nuit entre 22 h et 6 h
            return 'nuit';
        }
    }
});
 
let
    dateActuelle = moment(),
    date1 = moment('2018-09-18 07:35:52'), // jour > 6
    date2 = moment('2018-09-18 21:35:52'), // jour < 22
    date3 = moment('2018-09-19 06:35:52'), // nuit < 7
    date4 = moment('2018-09-19 22:00:00'); // nuit > 21
 
console.log(`date1 = ${ date1.format() }`);
console.log(`date1._locale.meridiem(date1.hours()) = ${ date1._locale.meridiem(date1.hours()) }`);
console.log('---------');
console.log(`date2 = ${ date2.format() }`);
console.log(`date2._locale.meridiem(date2.hours()) = ${ date2._locale.meridiem(date2.hours()) }`);
console.log('---------');
console.log(`date3 = ${ date3.format() }`);
console.log(`date3._locale.meridiem(date3.hours()) = ${ date3._locale.meridiem(date3.hours()) }`);
console.log('---------');
console.log(`date4 = ${ date4.format() }`);
console.log(`date4._locale.meridiem(date4.hours()) = ${ date3._locale.meridiem(date4.hours()) }`);
console.log('---------');
console.log(`dateActuelle = ${ dateActuelle.format() }`);
console.log(`dateActuelle._locale.meridiem(dateActuelle.hours()) = ${ dateActuelle._locale.meridiem(dateActuelle.hours()) }`);
 
/*
date1 = 2018-09-18T07:35:52+02:00
date1._locale.meridiem(date1.hours()) = jour
---------
date2 = 2018-09-18T21:35:52+02:00
date2._locale.meridiem(date2.hours()) = jour
---------
date3 = 2018-09-19T06:35:52+02:00
date3._locale.meridiem(date3.hours()) = nuit
---------
date4 = 2018-09-19T22:00:00+02:00
date4._locale.meridiem(date4.hours()) = nuit
---------
dateActuelle = 2018-08-24T21:44:20+02:00
dateActuelle._locale.meridiem(dateActuelle.hours()) = jour
*/

Licence Creative Commons Attribution 2.0 Belgique

Envoyer le billet « Comment puis-je déterminer, pour une date donnée, si c'est la nuit ou le jour ? » dans le blog Viadeo Envoyer le billet « Comment puis-je déterminer, pour une date donnée, si c'est la nuit ou le jour ? » dans le blog Twitter Envoyer le billet « Comment puis-je déterminer, pour une date donnée, si c'est la nuit ou le jour ? » dans le blog Google Envoyer le billet « Comment puis-je déterminer, pour une date donnée, si c'est la nuit ou le jour ? » dans le blog Facebook Envoyer le billet « Comment puis-je déterminer, pour une date donnée, si c'est la nuit ou le jour ? » dans le blog Digg Envoyer le billet « Comment puis-je déterminer, pour une date donnée, si c'est la nuit ou le jour ? » dans le blog Delicious Envoyer le billet « Comment puis-je déterminer, pour une date donnée, si c'est la nuit ou le jour ? » dans le blog MySpace Envoyer le billet « Comment puis-je déterminer, pour une date donnée, si c'est la nuit ou le jour ? » dans le blog Yahoo

Mis à jour 22/03/2019 à 21h28 par danielhagnoul

Tags: date, jour, moment, nuit
Catégories
Javascript , Développement Web , ES2015

Commentaires

  1. Avatar de psychadelic
    • |
    • permalink
    un peu déçu...


    L'heure du début du jour (ou celle du début de la nuit) dépendent des coordonnées ou l'on veut ce placer sur le globe terrestre, et de la date dans l'année.
    Exemple : les nuits son plus longues en hivers dans l’hémisphère nord.

    https://fr.wikipedia.org/wiki/Dur%C3%A9e_du_jour

    Ces données restent de toutes façons imprécises par le calcul absolu et constamment (chaque jour) corrigées dans les dans les éphémérides par le Service international de la rotation terrestre et des systèmes de référence => https://fr.wikipedia.org/wiki/Servic...A9f%C3%A9rence

    Ce qu'il faut comprendre c'est que la terre ne tourne pas sur elle-même de façon régulière mais par accoups. c'est imperceptible, mais cet effet est principalement du aux déplacement des marrées. il y a donc un "bureau" chargé de vérifier la durée du jours et cette information est utile par exemple pour recalibrer le réseau GPS, mais aussi dans le cas de la navigation spatiale pour pointer correctement les antennes sur terre vers les sondes d'exploration, et dans ce cas se gourer d'un poil pour les viser peut coûter des millions ( exemple New Horizon ~= 500 M$)


    on peut aussi rajouter les faits que la terre oscille légèrement sur son axe, que l’ellipse de sa trajectoire comprend des phases d'accélération et de ralentissement suivant la distance Terre - Soleil qui est elle même faiblement perturbé par les positions des autres planètes du système solaire ( voir les travaux de J.Laskar) ...

    https://fr.wikipedia.org/wiki/Rotation_de_la_Terre
    https://fr.wikipedia.org/wiki/Temps_...coordonn%C3%A9

    https://ptaff.ca/soleil/
    http://hpiers.obspm.fr/eop-pc/index....ange_lang=true

    https://ssl21.secure-svr.com/leshorairesdusoleil_com/

    https://fr.wikipedia.org/wiki/New_Horizons
    https://fr.wikipedia.org/wiki/Liste_...ndes_spatiales
  2. Avatar de danielhagnoul
    • |
    • permalink
    J'ai utilisé moment.js plutôt qu'une simple fonction JS parce que l'on peut mettre une règle nuit/jour différente dans chaque fichier local.

    Pour l'exemple j'ai utilisé une règle simpliste en me basant sur l'heure "légale" dans le local "fr".

    Rien n'empêche de définir des règles beaucoup plus sophistiquées en passant à la fonction la date complète au lieu de l'heure.
  3. Avatar de jreaux62
    • |
    • permalink
    Bonjour,

    Si on va par là, il faut aussi tenir compte de la longitude et latitude.