423 votes

Comment obtenir le début et la fin de la journée en Javascript ?

Comment obtenir le début ( 00:00:00 ) et la fin ( 23:59:59 ) du jour en horodatage ( GMT ) ? L'ordinateur utilise une heure locale.

8voto

afinemonkey Points 121

Si vous n'êtes intéressé que par les timestamps en GMT vous pouvez également le faire, ce qui peut être adapté de manière pratique pour différents intervalles (heure : 1000 * 60 * 60 12 heures : 1000 * 60 * 60 * 12 etc.)

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

3 votes

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 dois avertir tous ceux qui sont venus ici à partir d'une recherche Google et n'ont pas réalisé cela).

6voto

Mikhail Shabrikov Points 5735

Je préfère utiliser date-fns pour la manipulation des dates. Il s'agit d'un excellent outil modulaire et cohérent. Vous pouvez obtenir le début et la fin de 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>

2 votes

Pas de support pour la gestion des UTC.

1 votes

Pour la prise en charge de l'UTC et de la zone, vous pouvez consulter github.com/marnusw/date-fns-tz

5voto

Sagar Davara Points 103

Nous pouvons utiliser moment pour ça.

// for day start time
moment(moment().startOf('day')).format('HH:mm')

// for day end time
moment(moment().endOf('day')).format('HH:mm')

1voto

Jian Weihang Points 1695

C'est peut-être un peu délicat, mais vous pouvez utiliser Intl.DateTimeFormat .

L'extrait ci-dessous peut vous aider à convertir n'importe quelle date avec n'importe quel fuseau horaire en son heure de début/fin.

const beginingOfDay = (options = {}) => {
  const { date = new Date(), timeZone } = options;
  const parts = Intl.DateTimeFormat("en-US", {
    timeZone,
    hourCycle: "h23",
    hour: "numeric",
    minute: "numeric",
    second: "numeric",
  }).formatToParts(date);
  const hour = parseInt(parts.find((i) => i.type === "hour").value);
  const minute = parseInt(parts.find((i) => i.type === "minute").value);
  const second = parseInt(parts.find((i) => i.type === "second").value);
  return new Date(
    1000 *
      Math.floor(
        (date - hour * 3600000 - minute * 60000 - second * 1000) / 1000
      )
  );
};

const endOfDay = (...args) =>
  new Date(beginingOfDay(...args).getTime() + 86399999);

const beginingOfYear = () => {};

console.log(beginingOfDay({ timeZone: "GMT" }));
console.log(endOfDay({ timeZone: "GMT" }));
console.log(beginingOfDay({ timeZone: "Asia/Tokyo" }));
console.log(endOfDay({ timeZone: "Asia/Tokyo" }));

1voto

Giang Points 793
// get current time for UTC timezone
const d = new Date();
const year = d.getUTCFullYear();
const month = d.getUTCMonth();
const day = d.getUTCDate();
// set time to begin day UTC
const startTime = Date.UTC(year, month, day, 0, 0, 0, 0);
//set time to end day UTC
const endTime = Date.UTC(year, month, day, 23, 59, 0, 0);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X