Javascript'te başlangıç ​​ve gün sonu nasıl alınır?


271

Zaman damgasından (GMT) bugünün başlangıç ​​(00:00:00) ve bitiş (23:59:59) nasıl alınır? Yerel saat kullanma.

Yanıtlar:


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

Bunlardan UTC saatini almanız gerekiyorsa kullanabilirsiniz UTC().


24
var end = new Date(start.getTime());Zamanında aynı noktaya sahip olmanızı sağlamak için tavsiye ederim - başlangıç ​​ve bitiş başlatma arasında tarihleri ​​değiştirirseniz - olabilir - sadece iyi bir alışkanlık
Martyn Davis

@MartynDavis normal çalışma olduğunda, genellikle yaklaşık 0-2 keneler olur, ancak cpu ne kadar meşgul olduğuna bağlıdır, bu nedenle 1 kene hassasiyeti konusunda endişeleniyorsanız bunu yapmak mantıklıdır.
Jason Sebring

14
Ayrıca Universal timesetUTCHourssetHours
sidonaldson

2
İşler değişmiş olabilir, ancak bu benim için bir önceki günün UTC başlangıcını ve bir önceki günün UTC sonunu belirler.
David J

5
Lütfen @ sidonaldson'un son derece önemli yorumu okuyun. setHoursUTC saat yerine yerel saati ayarladığından kullanmak tehlikelidir.
Michael

229

Momentjs kütüphanesini kullanarak bu , momentin geçerli tarih nesnesindeki startOf()ve endOf()yöntemleriyle dizeyi 'day'bağımsız değişkenler olarak ileterek elde edilebilir:

Yerel GMT:

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

UTC için:

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

22
momentjs, JavaScript zaman işlemeyle ilgili her şey için tek adres. Her zaman ithalat değer.
Daniel F

8
Ve .toDate()sonunda tarihi almak için kullanmalıyız . var end = moment().endOf('day').toDate();
YaTaras

5
.unix()saniyeler içinde unix zaman damgası almak için sonuna ekleyin :) böyle:moment().startOf('day').unix()
Lukas Liesis

5
Eğer önceden tanımlanmış bir Date nesnesi varsa an js bir şekilde çalışmaz moment(new Date()).endOf("day");, örneğin çalışmıyor, ama moment().endOf("day");çalışıyor.
B. Kemmer

5
@KlasMellbourn, belirli bir saat diliminin için günün başlangıç yapmak için kullanabilirsiniz moment-timezoneve bunu: moment().tz('America/Chicago').startOf('day').toDate().
Chad Johnson

8

Kullanma luxon.js kütüphane aynı parametre olarak 'gün' geçirilerek startOf ve endOf yöntemler kullanılarak elde edilebilir

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

Yalnızca yerel saate ihtiyacınız varsa .toUTC () öğesini kaldırın

ve moment.js neden olmasın diye sorabilirsiniz , bunun için cevap burada .



6

Sadece zaman damgaları ile ilgilenen ediyorsanız GMT de rahatlıkla farklı aralıklarla (: saat için adapte edilebilen bu, yapabiliriz 1000 * 60 * 60, 12 saat: 1000 * 60 * 60 * 12vs.)

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
Önemli uyarı: Bu yalnızca UTC'de zaman istiyorsanız. (Sorunun sorulduğu şey budur ... ancak buraya bir Google aramasından gelen ve bunu fark etmeyen herkesi uyarmam gerektiğini hissediyorum.)
Kip

4

FYI (Tvanfosson'un birleştirilmiş versiyonu)

işlevi çağırırken gerçek tarih => tarih döndürür

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

// nasıl kullanılır

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

* Bölgenize bağlı olarak yerel saatinizi otomatik olarak dönüştüren Java8'deki Anında zaman türü için geçerlidir. (yazma global uygulaması planlıyorsanız)


0

Tarih işleme için date -fns kütüphanesini kullanmayı tercih ederim . Gerçekten harika modüler ve tutarlı bir araçtır. Günün başlangıcını ve sonunu şu şekilde alabilirsiniz:

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>


UTC kullanımı için destek yok.
Dobromir Hristov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.