Comment démarrer et terminer la journée en Javascript?


271

Comment démarrer (00:00:00) et terminer (23:59:59) aujourd'hui en horodatage (GMT)? L'ordinateur utilise une heure locale.

Réponses:


527
var start = new Date();
start.setHours(0,0,0,0);

var end = new Date();
end.setHours(23,59,59,999);

alert( start.toUTCString() + ':' + end.toUTCString() );

Si vous devez obtenir l'heure UTC à partir de ceux-ci, vous pouvez l'utiliser UTC().


24
Je recommanderais cela var end = new Date(start.getTime());pour vous assurer d'avoir le même moment dans le temps - dans le cas où vous changez les dates entre le début et la fin de l'initialisation - cela peut arriver - juste une bonne habitude pour entrer
Martyn Davis

@MartynDavis quand tout est un fonctionnement normal, généralement environ 0-2 ticks se produisent entre les deux, mais cela dépend de l'occupation du processeur, alors il est logique de le faire si vous vous inquiétez de la précision de 1 tick.
Jason Sebring

14
Je recommanderais également d'utiliser setUTCHoursau lieu de setHourspour obtenir l'heure universelle
sidonaldson

2
Les choses ont peut-être changé, mais pour moi, cela définit le début sur UTC pour le jour précédent et sur UTC pour le jour précédent.
David J

5
Veuillez lire le commentaire extrêmement important de @ sidonaldson. L'utilisation setHoursest dangereuse car elle définit les heures locales, au lieu des heures UTC.
Michael

229

En utilisant la bibliothèque momentjs , cela peut être réalisé avec les méthodes startOf()et endOf()sur l'objet date actuel du moment, en passant la chaîne 'day'comme arguments:

GMT local:

var start = moment().startOf('day'); // set to 12:00 am today
var end = moment().endOf('day'); // set to 23:59 pm today

Pour UTC:

var start = moment.utc().startOf('day'); 
var end = moment.utc().endOf('day'); 

22
momentjs est le guichet unique pour tout ce qui concerne la gestion du temps JavaScript. Vaut toujours l'importation.
Daniel F

8
Et nous devrions utiliser .toDate()à la fin pour obtenir la date. var end = moment().endOf('day').toDate();
YaTaras

5
ajoutez .unix()à la fin pour obtenir l'horodatage unix en quelques secondes :) comme ceci:moment().startOf('day').unix()
Lukas Liesis

5
moment js ne fonctionne pas si j'ai un objet Date prédéfini, par exemple moment(new Date()).endOf("day");ne fonctionne pas, mais moment().endOf("day");fonctionne.
B.Kemmer

5
@KlasMellbourn Pour obtenir le début de la journée pour un fuseau horaire spécifié, vous pouvez utiliser moment-timezoneet faire: moment().tz('America/Chicago').startOf('day').toDate().
Chad Johnson

8

À l'aide de la bibliothèque luxon.js , la même chose peut être obtenue en utilisant les méthodes startOf et endOf en passant le «jour» comme paramètre

var DateTime = luxon.DateTime;
DateTime.local().startOf('day').toUTC().toISO(); //2017-11-16T18:30:00.000Z
DateTime.local().endOf('day').toUTC().toISO(); //2017-11-17T18:29:59.999Z
DateTime.fromISO(new Date().toISOString()).startOf('day').toUTC().toISO(); //2017-11-16T18:30:00.000Z

supprimez .toUTC () si vous n'avez besoin que de l'heure locale

et vous pouvez demander pourquoi pas moment.js , la réponse est pour ça.



6

Si vous êtes simplement intéressé par les horodatages en GMT, vous pouvez également le faire, qui peut être facilement adapté à différents intervalles (heure:, 1000 * 60 * 6012 heures:, 1000 * 60 * 60 * 12etc.)

const interval = 1000 * 60 * 60 * 24; // 24 hours in milliseconds

let startOfDay = Math.floor(Date.now() / interval) * interval;
let endOfDay = startOfDay + interval - 1; // 23:59:59:9999

1
Mise en garde importante: cela ne fonctionne que si vous voulez l'heure en UTC. (C'est ce que la question demandait ... mais je pense que je devrais avertir quiconque est venu ici d'une recherche Google et ne l'a pas réalisé.)
Kip

4

FYI (version fusionnée de Tvanfosson)

il renverra la date réelle => date à laquelle vous appelez la fonction

export const today = {
  iso: {
    start: () => new Date(new Date().setHours(0, 0, 0, 0)).toISOString(),
    now: () => new Date().toISOString(),
    end: () => new Date(new Date().setHours(23, 59, 59, 999)).toISOString()
  },
  local: {
  start: () => new Date(new Date(new Date().setHours(0, 0, 0, 0)).toString().split('GMT')[0] + ' UTC').toISOString(),
  now: () => new Date(new Date().toString().split('GMT')[0] + ' UTC').toISOString(),
  end: () => new Date(new Date(new Date().setHours(23, 59, 59, 999)).toString().split('GMT')[0] + ' UTC').toISOString()
  }
}

// comment utiliser

today.local.now(); //"2018-09-07T01:48:48.000Z" BAKU +04:00
today.iso.now(); // "2018-09-06T21:49:00.304Z" * 

* il s'applique au type de temps instantané sur Java8 qui convertit automatiquement votre heure locale en fonction de votre région. (si vous prévoyez d'écrire une application globale)


0

Je préfère utiliser la bibliothèque date-fns pour la manipulation des dates. C'est vraiment un excellent outil modulaire et cohérent. Vous pouvez commencer et terminer la journée de cette façon:

var startOfDay = dateFns.startOfDay;
var endOfDay = dateFns.endOfDay;

console.log('start of day ==> ', startOfDay(new Date('2015-11-11')));
console.log('end of day ==> ', endOfDay(new Date('2015-11-11')));
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.29.0/date_fns.min.js"></script>


Pas de prise en charge de la gestion UTC.
Dobromir Hristov
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.