2011-09-19 26 views
7

Digamos que tengo 3 variables como este:Javascript a fecha del último día del mes anterior

var Month = 8; // in reality, it's a parameter provided by some user input 
var Year = 2011; // same here 
var FirstDay = new Date(Year, Month, 1); 

Ahora quieren tener el valor del día anterior al primer día del mes en una variable. Estoy haciendo esto:

var LastDayPrevMonth = (FirstDay.getDate() - 1); 

No está funcionando como estaba previsto. ¿Qué derecho de hacerlo?

Gracias.

Respuesta

13
var LastDayPrevMonth = new Date(Year, Month, 0).getDate(); 
+0

Este devuelve el día de la fecha, pero no la fecha en sí: 31, 28, 31 .. – frenchie

+1

Luego simplemente elimine '.getDate()'. getDate devuelve el día del mes. Parecía que eso era lo que querías en tu pregunta. – Will

0

Crea un nuevo objeto Date y pásalo la otra fecha forzada al número de milisegundos desde el Unix epoch y luego menos un día completo (en milisegundos).

var LastDayPrevMonth = new Date(FirstDay - 864e5); 

jsFiddle.

+0

Hace lo que dice. Eliminé el signo más. ¿Cuál es la constante igual a? Segundos en un día? – frenchie

+0

@renchie: milisegundos en un día. Sí, no necesitas el '+' cuando usas '-' como operador :) – alex

+0

@frenchie - Creo que la respuesta de William Van Rensselaer es mejor - simplemente establece la fecha en cero y obtienes el último día del mes anterior . – RobG

1
var LastDayPrevMonth = new Date(FirstDay); 
LastDayPrevMonth.setHours(FirstDay.getHours()-24); 
0
var FirstDay = new Date(Year, Month, 1); 
var lastMonth = new Date(FirstDay); 
lastMonth.setDate(-1); 
alert(lastMonth); 

Y recuerda que el 8 es sept no AUG en JavaScript. :)

0

Si necesita calcular esto basándose en la fecha de hoy (desea el último día del mes pasado), lo siguiente debería ayudar.

Si sólo se preocupan por el mes/día/año, este es el más simple y más rápido que puedo pensar:

var d = new Date(); d.setDate(0); 
console.log(d); 

Si desea medianoche del último día del mes anterior, entonces:

var d = new Date(); d.setDate(0); d.setHours(0,0,0,0); 
console.log(d); 

Si desea conocer el último día del mes anterior, basado en proporcionado año/mes:

var year = 2016, month = 11; 
var d = new Date(year, (month - 1)); d.setDate(0); d.setHours(0,0,0,0); 
console.log(d); 

Después de ejecutar cualquiera de los anteriores, para obtener el formato AAAA-M-D:

var str = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate(); 
console.log(str); 

Para ver otros métodos disponibles, y para ver lo que hacen, puede read the docs.

Cuestiones relacionadas