Come iniziare e finire la giornata in Javascript?


271

Come iniziare (00:00:00) e terminare (23:59:59) di oggi nel timestamp (GMT)? Il computer usa l'ora locale.

Risposte:


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() );

Se è necessario ottenere l'ora UTC da quelli, è possibile utilizzare UTC().


24
Ti consiglierei var end = new Date(start.getTime());di assicurarti di avere lo stesso punto nel tempo - nel caso in cui cambi le date tra l'inizio e la fine dell'inizializzazione - può succedere - solo una buona abitudine per entrare
Martyn Davis

@MartynDavis quando tutto è normale, di solito si verificano circa 0-2 tick ma dipende da quanto è impegnata la CPU, quindi ha senso farlo se sei preoccupato per la precisione di 1 tick.
Jason Sebring,

14
Vorrei anche raccomandare di utilizzare setUTCHoursinvece di setHoursottenere Universal time
sidonaldson

2
Le cose potrebbero essere cambiate, ma per me questo imposta l'inizio dell'ora UTC per il giorno precedente e la fine UTC per il giorno precedente.
David J,

5
Si prega di leggere il commento estremamente importante di @ sidonaldson. L'uso setHoursè pericoloso poiché imposta le ore locali, anziché le ore UTC.
Michael,

229

Usando la libreria momentjs , questo può essere ottenuto con i metodi startOf()e endOf()sull'oggetto data corrente del momento, passando la stringa 'day'come argomenti:

GMT locale:

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

Per UTC:

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

22
momentjs è lo sportello unico per tutte le cose relative alla gestione del tempo JavaScript. Vale sempre la pena importare.
Daniel F,

8
E dovremmo usare .toDate()alla fine per ottenere la data. var end = moment().endOf('day').toDate();
YaTaras,

5
aggiungi .unix()alla fine per ottenere unix timestamp in secondi :) in questo modo:moment().startOf('day').unix()
Lukas Liesis

5
moment js in qualche modo non funziona se ho un oggetto Date predefinito, ad es. moment(new Date()).endOf("day");non funziona, ma moment().endOf("day");funziona.
B. Kemmer,

5
@KlasMellbourn Per ottenere l'inizio di giornata per un fuso orario specifico, è possibile utilizzare moment-timezonee fare questo: moment().tz('America/Chicago').startOf('day').toDate().
Chad Johnson,

8

Usando la libreria luxon.js , lo stesso può essere ottenuto usando i metodi startOf ed endOf passando il 'giorno' come parametro

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

rimuovere .toUTC () se è necessaria solo l'ora locale

e potresti chiedere perché non moment.js , la risposta è qui per quello.



6

Se sei solo interessato ai timestamp nel GMT puoi anche farlo, che può essere comodamente adattato a diversi intervalli (ora:, 1000 * 60 * 6012 ore:, 1000 * 60 * 60 * 12ecc.)

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
Avvertenza importante: funziona solo se si desidera l'ora in UTC. (Questo è ciò che la domanda ha posto ... ma sento che dovrei avvertire chiunque sia venuto qui da una ricerca su Google e non se ne sia reso conto.)
Kip

4

FYI (versione unita di Tvanfosson)

restituirà la data effettiva => data quando si chiama la funzione

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()
  }
}

// come usare

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

* è applicabile per il tipo di ora istantanea su Java8 che converte automaticamente l'ora locale in base alla propria regione (se si prevede di scrivere un'app globale)


0

Preferisco usare la libreria date-fns per manipolare la data. È davvero un ottimo strumento modulare e coerente. Puoi iniziare e finire la giornata in questo modo:

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>


Nessun supporto per la gestione UTC.
Dobromir Hristov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.