2014-06-04 11 views
10

Come posso ottenere un timestamp unix del tempo 1 mese fa da oggi?Javascript ha un timestamp di 1 mese fa

so che ho bisogno di usare Date()

+1

Cosa intendi "un mese fa"? Il tempo equivalente a 30 giorni fa? Lo stesso giorno del mese precedente? Se quest'ultimo, come gestire il 31 ° giorno quando il mese precedente ha <31 giorni? Una volta capito cosa vuoi, dovrebbe essere abbastanza facile farlo funzionare. –

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date – japrescott

+3

'var dt = new Date(); dt.setMonth (dt.getMonth() - 1); ' –

risposta

16

Una risposta semplicistica è:

// Get a date object for the current time 
var d = new Date(); 

// Set it to one month ago 
d.setMonth(d.getMonth() - 1); 

// Zero the hours 
d.setHours(0, 0, 0); 

// Zero the milliseconds 
d.setMilliseconds(0); 

// Get the time value in milliseconds and convert to seconds 
console.log(d/1000|0); 

Si noti che se si sottrae un mese dal 31 luglio si ottiene 31 giugno, che sarà convertito al 1 ° luglio. allo stesso modo, il 31 marzo andrà al 31 febbraio, che si convertirà al 2 o al 3 marzo a seconda che si tratti di un anno bisestile o meno.

Quindi è necessario per controllare il mese:

var d = new Date(); 
var m = d.getMonth(); 
d.setMonth(d.getMonth() - 1); 

// If still in same month, set date to last day of 
// previous month 
if (d.getMonth() == m) d.setDate(0); 
d.setHours(0, 0, 0); 
d.setMilliseconds(0); 

// Get the time value in milliseconds and convert to seconds 
console.log(d/1000 | 0); 

Si noti che i valori di tempo JavaScript sono in millisecondi dal 1970-01-01T00: 00: 00Z, mentre i valori di tempo UNIX sono in secondi dal momento che la stessa epoca, quindi la divisione per 1000.

+1

Per chiunque si chieda, sì, è possibile eseguire un periodo di validità per un valore negativo (nel caso di gennaio). Sono rimasto piacevolmente sorpreso dal fatto che funzionasse e questo esempio di codice funzioni ancora in quel caso. – ryanm

+0

Un processo anonimo [Community] (http://stackoverflow.com/users/-1/community) ha aggiunto una riga per azzerare i millisecondi, tuttavia ciò non è necessario in quanto vengono troncati. Se fosse necessario, dovrebbe essere fatto nell'istruzione in cui le altre parti del tempo sono azzerate: 'd.setHours (0, 0, 0, 0);' – RobG

11

Si potrebbe dare un'occhiata a Moment.JS. Ha un sacco di metodi correlati alla data utile.

si potrebbe fare:

moment().subtract('months', 1).unix() 
4
var d = new Date(); 

E impostare il mese a un mese prima. (A CURA)

d.setMonth(d.getMonth()-1); 
+0

Hai ragione. colpa mia. –

Problemi correlati