2011-04-01 18 views

Odpowiedz

279
var date = new Date(); 

date ; //# => Fri Apr 01 2011 11:14:50 GMT+0200 (CEST) 

date.setDate(date.getDate() - 1); 

date ; //# => Thu Mar 31 2011 11:14:50 GMT+0200 (CEST) 
+3

Nice. Na pierwszy rzut oka może się wydawać, że to się nie powiedzie, ponieważ 'getDate' zwraca dzień miesiąca (np .: 1 - 31), ale właściwie' setDate (0) 'ustawia datę na ostatni dzień poprzedniego miesiąca. Czy działa to jednak we wszystkich przeglądarkach? –

+0

Nie można zweryfikować "wszystkich" przeglądarek, ale działałem we wszystkich testowanych wersjach https: //camo.githubusercontent.com/d9443979594114be925dc586285797773c60adbc/68747470733a2f2f63692e746573746c696e672e636f6d2f6a616d65736b796275727a2f7965737465726461792e706e67 –

+0

https://github.com/jameskyburz/yesterday –

51

Spróbuj

var d = new Date(); 
d.setDate(d.getDate() - 1); 
+0

Następne polecenie: d.setHours (19,59); Aby ustawić czas na 19:59 –

6
//Create a date object using the current time 
var now = new Date(); 

//Subtract one day from it 
now.setDate(now.getDate()-1); 
44

Nie bardzo wydajny, ale jak oneliner:

var yesterday = new Date(new Date().setDate(new Date().getDate()-1)); 

Powyższy tworzy trzy Date obiektów, które jest niepotrzebnie marnotrawstwem. To może być zmniejszona do jednej instancji z:

var yesterday = (function(){this.setDate(this.getDate()-1); return this}) 
        .call(new Date) 

Lub, jeśli wolisz:

var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date) 

Lub, jeśli wolisz ES6 z funkcją strzałką:

let yesterday = (d => new Date(d.setDate(d.getDate()-1)))(new Date); 
+5

wolałbym uniknąć brudząc z zakresu: 'var wczoraj = (function (d) {d.setDate (d.getDate() - 1); return d}) (nowa data)' –

+2

Jeśli potrzebujesz jednego -liner, użyj czegoś takiego jak nowy Date (Date.now() - 24 * 60 * 60 * 1000); ma to tę zaletę, że tworzy tylko jeden obiekt Date. Ale szczerze mówiąc, ktokolwiek zachowa ten kod, będzie * bardziej * szczęśliwszy, widząc przejrzystą wersję 2-liniową, niż gdyby coś wyrzucało funkcje dookoła (lub milisekundy, o to chodzi). –

4

To będzie produkować wczoraj o 00:00 z precyzją minutową

var d = new Date(); 
d.setDate(d.getDate() - 1); 
d.setTime(d.getTime()-d.getHours()*3600*1000-d.getMinutes()*60*1000); 
2
d.setHours(0,0,0,0); 

rade

+1

Czy to? Myślałem, że to po prostu ustaw twoje godziny, minuty i sekundy na 0, ale tak naprawdę nie zmienia daty? –

13

uogólnić pytanie i zrobić inne obliczenia diff użyć:

var yesterday = new Date((new Date()).valueOf() - 1000*60*60*24); 

ten tworzy nowy obiekt Date w oparciu o wartości „teraz” jako liczbę całkowitą, która reprezentuje Epoka uniksowa w milisekundach, odejmując jeden dzień.

dwa dni temu:

var twoDaysAgo = new Date((new Date()).valueOf() - 1000*60*60*24*2); 

godzinę temu:

var oneHourAgo = new Date((new Date()).valueOf() - 1000*60*60); 
+0

To wydaje się być najbezpieczniejszą metodą, ponieważ działamy w epoce unixowej wyrażonej w milisekundach. A więc arytmetyka jest bezpieczniejsza niż zrobienie czegoś takiego jak getDate() - 1. Nie próbowałem getDate() - 1, ale na podstawie dokumentacji getDate(), zwróci 1, jeśli dzisiejsza data jest pierwsza w dowolnym miesiącu. I 1-1 = 0 nie jest prawidłową datą. Nie wiem, jak zadziała funkcja setDate (0). –

+1

To było moje podejście, chociaż możesz je nieco uprościć - spróbuj czegoś nowego, jak Date (Date.now() - 24 * 60 * 60 * 1000); –

+0

setDate (0), przy okazji, byłby w porządku - przerzucałby się do ostatniego dnia poprzedniego miesiąca. Wydaje mi się jednak, że jest to bardziej przejrzyste (i bardziej intuicyjne), że w tym miejscu upuszczam tutaj milisekundową reprezentację - jedyną wadą jest to, że "liczba milisów w ciągu dnia" nie jest tak oczywista, więc można łatwo pomylić te obliczenia. –

27

Niespodziewanie sensu odpowiedź na najprostsze rozwiązanie przekroju przeglądarki

Aby znaleźć dokładnie ten sam czas wczoraj:

var yesterday = new Date(Date.now() - 86400000); // that is: 24 * 60 * 60 * 1000 

To znaczy, jeśli chcesz iść zależność wolne, inaczej bym zalecamy stosowanie http://momentjs.com

+0

Jak to działa, gdy zmienia się zmiana czasu? Czy to nie zaszkodzi przed/za godziną? –

1

spróbuj tego, działa na mnie:

var today = new Date(); 
var yesterday = new Date(today.setDate(today.getDate() - 1)); ` 

To dało mi obiektu sięgają do wczorajszego

Powiązane problemy