Último día del mes (sin marca de tiempo)

Estoy tratando de crear dos fechas dinámicas en html / javascript / jquery. Quiero que las fechas tengan el formato aaaa / mm / dd. La primera fecha devolverá el último día del mes anterior y la segunda fecha devolverá el último día del mes actual. ¿Alguien sabe cómo hacer esto en las tecnologías enumeradas anteriormente?

Estoy 99.9999% seguro de que puedo lograr esto haciendo una llamada a una página de backend usando C #, pero quiero ver si hay una forma más eficiente de hacer esto en el DOM (¿DOM es la terminología correcta?).

De una pregunta anterior sobre SO, aquí está el código que estoy usando ahora ...

var d = new Date();
document.write(new Date(d.getFullYear(), d.getMonth() + 1, 0, 23, 59, 59));

preguntado el 16 de mayo de 11 a las 18:05

3 Respuestas

Parece que ya tienes la mayor parte de la respuesta:

var d = new Date();
var lastcurrent = new Date(d.getFullYear(), d.getMonth() + 1, 0, 23, 59, 59);
var lastprevious = new Date(d.getFullYear(), d.getMonth(), 0, 23, 59, 59);

Luego, para formatearlos como desee, puede usar:

document.write(lastcurrent.getFullYear() + '/'
               + (lastcurrent.getMonth() + 1) + '/' + lastcurrent.getDate());
document.write(lastprevious.getFullYear() + '/' 
               + (lastprevious.getMonth() + 1) + '/' + lastprevious.getDate());

jsFiddle aquí.

Editar
Con mes de dos dígitos (el último día siempre debe tener dos dígitos):

document.write(lastcurrent.getFullYear()
               + '/' + String('00'+(lastcurrent.getMonth() + 1) ).slice(-2)
               + '/' +  lastcurrent.getDate() );
document.write(lastprevious.getFullYear()
               + '/' + String('00'+ (lastprevious.getMonth() + 1) ).slice(-2)
               + '/' + lastprevious.getDate());

contestado el 17 de mayo de 11 a las 00:05

en la última línea de código de su edición, creo que lastcurrent.getDate () debería ser lastprevious.getDate (). Estoy en lo cierto? - Señor hormiga

@ Hormiga - Sí. Lo siento, copiar y pegar me consiguió. : P Lo he arreglado ahora. - Richard Marskell por Drackir

Sin preocupaciones. ¡Gracias por la ayuda! Lo habría editado yo mismo, pero todavía no tengo suficientes privilegios para editar las respuestas. - Señor hormiga

esto debería hacerlo

var today = new Date();

var lastofpreviews = new Date( today.getUTCFullYear(), today.getUTCMonth()    , 0 );
var lastofthis     = new Date( today.getUTCFullYear(), today.getUTCMonth() + 1, 0 );

demostración en http://jsfiddle.net/gaby/GW9B9/

contestado el 16 de mayo de 11 a las 22:05

var d = new Date();
document.write(new Date(d.getFullYear(), d.getMonth(), 0, 23, 59, 59).toLocaleFormat('%Y/%m/%d'));
document.write(new Date(d.getFullYear(), d.getMonth() + 1, 0, 23, 59, 59).toLocaleFormat('%Y/%m/%d'));

Esto formateará las fechas en el formato solicitado (AAAA / mm / dd)

contestado el 16 de mayo de 11 a las 23:05

No creo que ese método tenga un gran apoyo. - Richard Marskell por Drackir

Según Netbeans, debería funcionar en todos los navegadores convencionales e incluso en IE6. No tengo todos esos navegadores disponibles para probar, así que debo asumir que Netbeans es correcto. - Arjan

Lo acabo de probar en Opera, IE8, Safari 3 (Win), Chrome y FF3. Solo funcionó en FF. Código de prueba aquí si quieres probar también. - Richard Marskell por Drackir

El código también funciona en FF4, pero no en Chromium. Supongo que no está tan extendido como Netbeans me hizo creer. - Arjan

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.