month getyear getmonth getday day javascript

getyear - javascript get day of month



¿El método Date.getMonth() tiene un error? (9)

Acabo de resolver de esta manera:

Ejemplo

var d = new Date(''2013/01/31''); m = d.getMonth(); month = m*100/100 + 1;

Var month contiene el valor correcto.

Lo probé en Chrome y Firefox, y aquí está el problema. ¿El método getMonth() del objeto Date tiene un error? Cuando establezco la fecha de ubicación en algún día, como "2013-1-31"

entonces, el código js es:

var d = new Date(); d.setMonth(8); d.getMonth();

El resultado es "9", ¿por qué?

Encontré que cuando el mes tiene 31 días, ejecute el método setMonth y el método getMonth devolverá un valor incorrecto

¿por qué?


El método getMonth() devuelve el mes (de 0 a 11) para la fecha especificada, según la hora local, por ejemplo. Enero es 0, Febrero es 1.


El método getMonth () devuelve el mes (de 0 a 11) para la fecha especificada, según la hora local.

Nota : enero es 0, febrero es 1, y así sucesivamente.


El setMonth aquí no es lo que esperas, y lo que sucede en mejores bibliotecas. Si establece una fecha 31.x.yyyy en x + 1, probablemente el próximo mes (x + 1) no tendrá 31 días. Entonces 31.x + 1.yyyy se cambiará a 1.x + 2.yyyy.

En tal caso, el mes se incrementará en 2, la fecha se modificó por completo.

Tuve este problema con el cambio de febrero-> marzo, gracias a Dios que solo fue una prueba.


En javascript, el mes comienza desde 0. Supongamos que hoy es 02/04/2012, cuando configura Mes (1) intentará establecerlo en feb. Como el día máximo en febrero es 28/29, se mueve al mes siguiente (marzo, que es 2)


Esto tiene que ver con la fecha local actual, incluso si la fecha que está configurando está en el pasado o en el futuro (suponiendo que está utilizando correctamente el rango de mes 0-11). Esto se debe a que cuando inicializa Date (), está usando la fecha actual. Cuando modifica la fecha utilizando setFullYear (), setMonth () o setDate (), los valores "actuales" predeterminados todavía están presentes y pueden cambiar la fecha.

Si su día actual del mes (hoy) es el 31 del mes y luego establece una fecha en el pasado usando setMonth (), setDate () donde el mes tiene menos de sus 31 días actuales, entonces Date () le dará Usted es el mes equivocado, incluso si lo declara específicamente. Esto se debe a que cuando establece Mes (), el valor de fecha actual de 31, que no existe en el mes que estableció, lo empuja al mes siguiente. Luego, cuando establece la fecha, el mes nunca vuelve a cambiar.

Si configura el día del mes anterior al mes: setDate (), setMonth (), esto soluciona el problema, pero tiene otro problema / error similar. Si su mes actual solo tiene 30 días y la fecha que está tratando de establecer tiene 31 días, establecerá la fecha del mes en 1, no en 31. Esto se resuelve si establece el mes anterior al día - setMonth () , setDate (), pero luego regresas al primer problema.

Soluciones:

  1. Obtenga los valores y luego establezca el día del mes y el mes al mismo tiempo (como se sugiere de nuevo) - setMonth (8,1)
  2. Establezca el año con valores opcionales para inicializar setFullYear (1972, 0, 1), luego setMonth, setDate.
  3. Establezca el mes, establezca el día, luego verifique que el mes sea igual a lo que lo configuró y vuelva a configurarlo si no es así: establezcaMonth (), setDate (), setMonth ()

function formatDate(date) { var monthNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; var day = date.getDate(); var monthIndex = date.getMonth(); var year = date.getFullYear(); return day + '' '' + monthNames[monthIndex] + '' '' + year; } var date = new Date(); if (date.getDate() < 31) { $("#mydate").text("YOUR LOCAL DATE (on your computer) MUST BE SET TO THE 31st for this bug to show."); } else { date.setFullYear(1972); date.setMonth(8); // (month-1) date.setDate(24); var breakdown = "<br>Day: " + date.getDate() + "<br>Month: " + date.getMonth() + "<br>Year: " + date.getFullYear(); $("#mydate").html("Set as September (8)<br><br>" + formatDate(date) + breakdown); var date = new Date(); date.setFullYear(1972); date.setMonth(8, 24); // (month-1) var breakdown = "<br>Day: " + date.getDate() + "<br>Month: " + date.getMonth() + "<br>Year: " + date.getFullYear(); $("#mydate4").html("Set as September (8) but set day before month<br><br>" + formatDate(date) + breakdown); date.setFullYear(1972); date.setMonth(9); //October (month-1) date.setDate(24); var breakdown = "<br>Day: " + date.getDate() + "<br>Month: " + date.getMonth() + "<br>Year: " + date.getFullYear(); $("#mydate2").html("Set as October (9)<br><br>" + formatDate(date) + breakdown); var date = new Date(); date.setFullYear(1972); date.setMonth(7); //Aug (month-1) date.setDate(24); var breakdown = "<br>Day: " + date.getDate() + "<br>Month: " + date.getMonth() + "<br>Year: " + date.getFullYear(); $("#mydate3").html("Set as August (7)<br><br>" + formatDate(date) + breakdown); }

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> September 1972 has only 30 days. If your current local day is 31, the Date will return October 1972 when you specify September before you specify the day of the month. <br><br><div id="mydate" style="color: red;"> </div> <br><br> <div id="mydate4"> </div><br><br> <div id="mydate2"> </div> <br><br> <div id="mydate3"> </div>


La solución más simple para esto es agregar un segundo argumento a setMonth:

var d = new Date(); d.setMonth(8,1); d.getMonth(); //outputs 8

http://www.w3schools.com/jsref/jsref_setmonth.asp

Date.setMonth (mes, día)

día: opcional. Un número entero que representa el día del mes Los valores esperados son 1-31, pero se permiten otros valores:

0 dará como resultado el último día del mes anterior -1, resultará el día anterior al último día del mes anterior, si el mes tiene 31 días:

El resultado será 32 el primer día del mes siguiente, si el mes tiene 30 días:

32 resultará en el segundo día del próximo mes.


Los meses en JavaScript están representados de 0-11. El mes 1 sería febrero, que solo tiene 28/29 días, por lo que cuando establece el mes en 1, intenta corregir automáticamente la fecha a marzo para hacer una fecha que tenga sentido (desde el 31 de febrero no tiene sentido). Pruébelo usando la función toDateString para ver lo que quiero decir:

var d = new Date(''2013/01/31''); d.setMonth(2); console.log(d.toDateString()); // outputs Match 3rd, 2013

Un poco raro quizás, pero no con buggy.


Vamos a desglosar esto:

var d = new Date(); // date is now 2013-01-31 d.setMonth(1); // date is now 2013-02-31, which is 3 days past 2013-02-28 x = d.getMonth(); // what to do, what to do, 3 days past 2013-02-28 is in March // so, expect x to be March, which is 2

Esto es solo un problema cuando el valor del día de d es mayor que el número máximo de días en el mes pasado a setMonth() . De lo contrario, funciona como se espera.