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()
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()
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.
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
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
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()
var d = new Date();
E impostare il mese a un mese prima. (A CURA)
d.setMonth(d.getMonth()-1);
Hai ragione. colpa mia. –
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. –
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date – japrescott
'var dt = new Date(); dt.setMonth (dt.getMonth() - 1); ' –