Hur får man start och slut på dagen i JavaScript?


Hur får man start (00:00:00) och slut (23:59:59) av idag i tidsstämpel (GMT)?

Datorn använder lokal tid.

Svar #1

var start = new Date();
start.setUTCHours(0,0,0,0);

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

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

Om du behöver få UTC-tiden från dessa kan du använda UTC().

Svar #2

Med dayjs-biblioteket, använd startOf och endOf-metoderna på följande sätt:

Lokalt GMT:

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

För UTC:

const utc = require('dayjs/plugin/utc');
dayjs.extend(utc);

const start = dayjs.utc().startOf('day'); 
const end = dayjs.utc().endOf('day'); 

Med hjälp av det (föråldrade) momentjs-biblioteket kan detta uppnås med metoderna startOf() och endOf() på moments nuvarande datumobjekt, genom att skicka strängen 'day' som argument:

Lokalt GMT:

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

För UTC:

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

Svar #3

Enradare - med hänsyn till lokal tidszon och utan bibliotek

const todayStart = new Date(new Date().setHours(0, 0, 0, 0))
const todayEnd = new Date(new Date().setHours(23, 59, 59, 999))

const tomorrowStart = new Date(new Date(new Date().setHours(0, 0, 0, 0)).setDate(new Date().getDate() + 1))
const tomorrowEnd = new Date(new Date(new Date().setHours(23, 59, 59, 999)).setDate(new Date().getDate() + 1))

const monthStart = new Date(new Date(new Date().getFullYear(), new Date().getMonth(), 1).setHours(0, 0, 0, 0))
const monthEnd = new Date(new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0).setHours(23, 59, 59, 999))

const nextMonthStart = new Date(new Date(new Date().getFullYear(), new Date().getMonth() + 1, 1).setHours(0, 0, 0, 0))
const nextMonthEnd = new Date(new Date(new Date().getFullYear(), new Date().getMonth() + 2, 0).setHours(23, 59, 59, 999))

console.log({
  todayStart,
  todayEnd,
  tomorrowStart,
  tomorrowEnd,
  monthStart,
  monthEnd,
  nextMonthStart,
  nextMonthEnd,
})

Svar #4

FYI (sammanfogad version av Tvanfosson)

det kommer att returnera faktiskt datum => datum när du anropar funktionen

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

// hur man använder

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

* det är tillämpligt för Instant-tidstypen i Java8 som automatiskt konverterar din lokala tid beroende på din region. (om du planerar att skriva en global app)

Svar #5

Med hjälp av luxon.js-biblioteket kan samma uppnås med metoderna startOf och endOf genom att passera 'day' som parameter

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

ta bort .toUTC() om du bara behöver den lokala tiden

och du kanske frågar varför inte moment.js, svaret finns här för det.

Svar #6

I MomentJs kan vi deklarera det så här :

   const start = moment().format('YYYY-MM-DD 00:00:01');
   const end = moment().format('YYYY-MM-DD 23:59:59');

Relaterade artiklar