2012-08-14 19 views
9

No puedo entender la diferencia entre los métodos toString() y toLocaleString() de un objeto Date en JavaScript. Una cosa que sé es que toString() se llamará automáticamente cada vez que los objetos Date se conviertan en cadena.JavaScript: Diferencia entre los métodos toString() y toLocaleString() de Fecha

El código siguiente devuelve siempre resultados idénticos:

​var d = new Date(); 
document.write(d + "<br />"); 
document.write(d.toString() + "<br />"); 
document.write(d.toLocaleString()); 

Y la salida es:

Tue Aug 14 2012 08:08:54 GMT+0500 (PKT) 
Tue Aug 14 2012 08:08:54 GMT+0500 (PKT) 
Tue Aug 14 2012 08:08:54 GMT+0500 (PKT) 

Respuesta

12

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toLocaleString

Básicamente, se da formato a la Fecha de cómo iba a ser formateado en la computadora donde se llama a la función, por ejemplo Mes antes del Día en EE. UU., Día antes del Mes en la mayor parte del resto del mundo.

EDIT:

Debido a que algunos otros señalaron que la referencia anterior no es necesario confiable, ¿cómo es esto de la ECMAScript spec:

15.9.5.2 Date.prototype.toString ()

Esta función devuelve un valor de cadena. Los contenidos del String son de implementación - >> dependientes, pero están destinados a representar la Fecha en el huso horario actual en una forma conveniente y legible para el ser humano.

15.9.5.5 Date.prototype.toLocaleString ()

Esta función devuelve un valor de cadena. Los contenidos de String son de implementación - >> dependientes, pero están destinados a representar la Fecha en la zona horaria actual en una forma conveniente, legible para el ser humano, que corresponde a las convenciones de la configuración regional actual del entorno de host.

Dado que se espera que puedan suponer que la mayoría de las implementaciones reflejarán la especificación, la diferencia es que toString() es sólo necesaria para ser legible, toLocaleString() debe ser legible en un formato que el debe coincidir con las expectativas de los usuarios en función de su lugar.

+0

Sí, pero ¿cuál es la diferencia? –

+2

desde https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toString - toString siempre devuelve una representación de cadena de la fecha en inglés americano. – phenomnomnominal

+0

Cambio la configuración de localización en mi sistema y luego pruebo. La diferencia estaba clara ahora. ¡Gracias! –

5

Convierte una fecha en una cadena, utilizando las convenciones de la configuración regional del sistema operativo.

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toLocaleString

toLocaleString comporta de manera similar a toString al convertir un año que el sistema operativo no lo hace adecuadamente formato.

+0

Sí, pero ¿cuál es la diferencia? –

+1

Uno es específico del sistema operativo. El otro no es –

+0

Sí, gracias @phenomnomnominal me lo quitó. También estoy votando por su respuesta :-) –

1

Muchas referencias, pero ninguna tiene autoridad.Tenga en cuenta que la documentación de Mozilla es para JavaScript, que es su versión de ECMAScript para navegadores. Otros navegadores usan otras implementaciones y, por lo tanto, aunque la documentación de MDN es útil, no es autoritativa (también es una wiki de la comunidad, por lo que ni siquiera es la documentación oficial de Mozilla) y no se aplica necesariamente a otros navegadores.

La referencia definitiva es la especificación del lenguaje ECMAScript, donde el comportamiento de Date.prototype.toString y Date.prototype.toLocaleString se explican en términos independientes del navegador.

Notable es para ambos métodos, la cadena es implementación dependiente, lo que significa que diferentes navegadores devolverán diferentes cadenas.

+0

Hmm así que mi pregunta era válida :-) Existe confusión sobre la diferencia exacta y el comportamiento del navegador –

+0

@ MuhammadAhmadZafar-Sí, una pregunta válida. La conclusión es que si bien la mayoría de los buscadores devuelven un formato de fecha céntrico para * toString *, eso depende totalmente de los desarrolladores y puede cambiar ya que la mayoría de los usuarios no usan normalmente el formato de fecha de los EE. UU. Además, incluso teniendo en cuenta la configuración regional, algunos pueden regresar, por ejemplo, 10 de agosto de 2012 y otros 10/08/2012. – RobG

2

Acabo de registrar la consola de Chrome para la fecha y he encontrado la diferencia en el formato de presentación. Espero que esto pueda ayudar.

var d = new Date(); 

console.log(d.toLocaleString()); //"04.09.2016, 15:42:44" 
console.log(d.toString());  //"Sun Sep 04 2016 15:42:44 GMT+0300 (FLE Daylight Time)" 
Cuestiones relacionadas