2009-03-03 21 views
22

dado un objeto de fecha, cómo conseguir el primer día de su mes anterior en javascriptprimer día del mes anterior en javascript

+0

un título más descriptivo podría ser bueno ... – helloandre

+0

He actualizado el título – Prestaul

+0

http://stackoverflow.com/questions/594054/date-problem-in-java se parece a su pregunta anterior era para Java. entonces no es exactamente un duplicado :) –

Respuesta

32
function firstDayInPreviousMonth(yourDate) { 
    var d = new Date(yourDate); 
    d.setDate(1); 
    d.setMonth(d.getMonth() - 1); 
    return d; 
} 

EDIT: Muy bien ... definitivamente he aprendido algo aquí. Creo que esta es la solución más simple que cubre todos los casos (y sí, funciona para enero):

function firstDayInPreviousMonth(yourDate) { 
    return new Date(yourDate.getFullYear(), yourDate.getMonth() - 1, 1); 
} 
+0

Tenga en cuenta que esto FALLARÁ por algo como: firstDayInPreviousMonth (new Date ("Mar 31 2009")). Vea los comentarios en: http://stackoverflow.com/questions/499838/javascript-date-next-month – Shog9

+0

No fallaría si setDate (1) antes de hacer el setMonth() –

+0

Sí, eso funciona bien. – Shog9

12

La siguiente debería funcionar:

now = new Date(); 
if (now.getMonth() == 0) { 
    current = new Date(now.getFullYear() - 1, 11, 1); 
} else { 
    current = new Date(now.getFullYear(), now.getMonth() - 1, 1); 
} 

teniendo en cuenta que meses son cero basado modo de diciembre es 11 en lugar de 12.

Pero, como otros han señalado, las envolturas mes, incluso como parte de la constructora atómica, por lo que el siguiente también es posible:

now = new Date(); 
firstDayPrevMonth = new Date(now.getFullYear(), now.getMonth() - 1, 1); 
+1

Me gusta este enfoque, pero su solución en realidad no es correcta. Cuando getMonth() == 1, el mes es febrero.Desea comprobar getMonth() == 0, e incluso eso no es necesario porque el constructor de fechas aceptará valores negativos y funcionará correctamente. – Prestaul

+0

Está descuidando el hecho de que setMonth ajustará los valores. La respuesta de Prestaul funciona bien para enero. – overslacked

+0

Sí, pero no para volver a un mes en el que la cantidad de días es menor, lamentablemente. Es mejor construir la nueva fecha atómicamente que en partes. – paxdiablo

2

Me gusta esta solución. Puede que no sea la más breve, pero pone de relieve algunas de las funciones del método setDate() en la fecha() objetos que no todo el mundo estará familiarizado con:

function firstDayPreviousMonth(originalDate) { 
    var d = new Date(originalDate); 
    d.setDate(0); // set to last day of previous month 
    d.setDate(1); // set to the first day of that month 
    return d; 
} 

que hace uso del hecho de que .setDate (0) cambiará la fecha para que apunte al último día del mes anterior, mientras que .setDate (1) lo cambiará (más) para señalar el primer día de ese mes. Permite que las librerías de JavaScript centrales hagan el trabajo pesado.

Puede ver un working Plunk here.

0

Le ayudará a obtener la primera y la última fecha del mes anterior.

function getLastMonth(){ 
     var now = new Date(); 
     var lastday = new Date(now.getFullYear(), now.getMonth(), 0); 
     var firstday = new Date(lastday.getFullYear(), lastday.getMonth(), 1); 
     var lastMonth = firstday.getDate()+'/'+(firstday.getMonth()+1)+'/'+firstday.getFullYear()+' - '+lastday.getDate()+'/'+(firstday.getMonth()+1)+'/'+lastday.getFullYear(); 
     return lastMonth; 
} 
Cuestiones relacionadas