web-dev-qa-db-fra.com

Javascript estampillé il y a 1 mois

Comment puis-je obtenir l'horodatage Unix de l'époque il y a 1 mois?

Je sais que je dois utiliser Date()

22
Harry

Une réponse simpliste est:

// 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);

Notez que si vous soustrayez un mois à partir du 31 juillet, vous obtenez le 31 juin, qui sera converti au 1er juillet. de même, le 31 mars ira au 31 février qui se convertira au 2 ou au 3 mars selon qu'il s'agit d'une année bissextile ou non.

Vous devez donc vérifier le mois:

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

Notez que les valeurs de temps JavaScript sont en millisecondes depuis 1970-01-01T00: 00: 00Z, tandis que les valeurs de temps UNIX sont en secondes depuis la même époque, d'où la division par 1000.

32
RobG

Vous pouvez jeter un œil à Moment.JS. Il a un tas de méthodes utiles liées à la date.

Vous pourriez faire:

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

Et réglez le mois sur un mois avant. (ÉDITÉ)

d.setMonth(d.getMonth()-1);
10
Mr.Cocococo