Tengo un objeto de fecha y necesito crear otro objeto de fecha 1 semana después del primer objeto de fecha. Ya tengo una implementación, pero parece que hay un error con JavaScript cuando llega a los meses de octubre, noviembre y diciembre. ¿Hay una solución para esto? Tenga en cuenta que el comportamiento es consistente en Chrome, FF e IE.

        // ************ TEST#1 ************
        var startDate = new Date(2011,08,05); // set to Sept 5, 2011
        alert('START DATE' + startDate);

        var endDate = new Date();
        endDate.setDate(startDate.getDate() + 7);

        alert('END DATE' + endDate); // endDate is Sept 12 which is correct
        // check that startDate's value is unchanged
        alert('START DATE' + startDate); 


        // ************ TEST#2 ************
        var startDate = new Date(2011,10,05); // set to Nov 5, 2011
        alert('START DATE' + startDate);

        var endDate = new Date();
        endDate.setDate(startDate.getDate() + 7);

        alert('END DATE' + endDate); // endDate is Sept 12, 2011 which is wrong
        alert('START DATE' + startDate);



        // ************ TEST#3 ************
        // changed implementation but this won't work
        var startDate = new Date(2011,10,05);
        alert('START DATE' + startDate);

        var endDate = startDate;
        endDate.setDate(startDate.getDate() + 7);

        alert('END DATE' + endDate); // endDate is correct but...
        alert('START DATE' + startDate); // startDate's value has changed as well
0
Aleks Felipe 9 sep. 2011 a las 17:47

3 respuestas

La mejor respuesta

Creo que su error podría ser que está configurando endate para hoy.

    // ************ TEST#2 ************
    var startDate = new Date(2011,10,05); // set to Nov 5, 2011
    alert('START DATE' + startDate);

    // edit
    var endDate = new Date(startDate.getFullYear(),startDate.getMonth(),startDate.getDate() + 7);
    // old var endDate = new Date();
    // endDate.setDate(startDate.getDate() + 7);

    alert('END DATE' + endDate); // endDate is Sept 12, 2011 which is wrong
    alert('START DATE' + startDate);
3
Jonathan 9 sep. 2011 a las 14:13

Esto no es un error. En este caso, Date es un objeto y tanto startDate como endDate se refieren a la misma instancia Date. Por lo tanto, cuando cambia el objeto subyacente, es visible a través de ambas referencias

EDITAR

OP especificó que el error está en la Prueba # 2

Esto todavía no es un error. El problema aquí es que setDate solo cambiará el día del mes. En esto has ejecutado startDate.getDate() + 7 donde startDate.getDate() === 5 por lo que está ajustando correctamente la parte de la fecha de endDate al 12 del mes.

2
JaredPar 9 sep. 2011 a las 13:55

Además de JaredPar, la nueva Fecha () creará una fecha con la hora actual, y si solo invoca .setDate () solo cambiará el "día del mes".

1
jishi 9 sep. 2011 a las 13:52