2010-09-01 15 views
5

Estoy tratando de entender más sobre el objeto Date en javascript. Pensé que cuando llamas a valueOf(), obtienes la cantidad de milisegundos desde el 1 de enero de 1970. Entonces, lo que esperaría es que lo siguiente devuelva exactamente cero;Fecha javascript

alert((new Date(1970, 1, 1).valueOf())/ (86400 * 1000)); 

pero no lo tiene, devuelve 30.958333333333332. ¿Qué me estoy perdiendo?

gr,

Coen

+2

Como pregunta, ¿cómo esperaba obtener el cero de una división? – Stephen

+1

Pregunta extraña, Stephen. – slikts

+0

@Stephen, se dice de manera extraña, pero creo que esperaba que el numerador fuera 0. No tengo idea de por qué la división está ahí ... – Kendrick

Respuesta

2

segundo parámetro, meses, comienza con 0, por lo que tiene que hacer:

alert((new Date(1970, 0, 1).valueOf())/ (86400 * 1000)); 

pero incluso con este obtendrá el offset, en segundos, fuera GMT.

el valor informados dice que eres GMT +1:)

+0

¿Cuál es la razón detrás de comenzar meses con 0 y días con 1? – Coen

+0

Lea las respuestas a [este] (http://stackoverflow.com/questions/393462/defend-zero-based-arrays). – Stephen

+0

No hablamos de cero. http://www.amazon.com/Zero-Biography-Dangerous-Charles-Seife/dp/0140296476 – Incognito

0

El método que está buscando es .getTime() no .valueOf()

+1

Según W3Schools, son lo mismo. Una autocomprobación rápida: ' 'muestra que esto funciona (para mí, en este momento exacto en el tiempo). ¿Tiene una fuente para contradecir esto? – Stephen

6

new Date (1970, 1, 1), en realidad es Meses Feb. son indexados de cero. Intente cambiarlo a una nueva fecha (1970, 0, 1).

+0

Jeez Javascript. ¿Desde cuándo alguien se refiere a enero como el mes cero? – jessegavin

+0

@jessegavin: desde 1996. http://download.oracle.com/javase/1.4.2/docs/api/java/util/Date.html que es de lo que se derivó el comportamiento 'Fecha' de JavaScript (en realidad JScript). –

+0

Los números siempre deberían comenzar con 0, vivimos en un mundo realmente desordenado. Solo mire la inconsistencia de solo este constructor. El primer mes es 0, el primer día es 1, el primer año es 1970, ¿qué diablos? : p – Incognito

0

Los meses están basados ​​en cero en los objetos de fecha.

0

El 1 de enero de 1970 es new Date(1970, 0, 1), ya que los meses comienzan en 0 = enero.

0

El primero de enero 1970 con el objeto Date es new Date(1970, 0, 1)

2

Si usted está buscando para trabajar con el unix epoch time, tienes unas pocas opciones

  • UTC() Devuelve el número de milisegundos en un fecha cadena desde medianoche del 1 de enero de 1970, según el horario universal
  • setTime() Establece una fecha y hora por añadiendo o restando un determinado número de milisegundos a/desde la medianoche del 1 de enero de, 1970
  • parse() analiza una cadena de fecha y devuelve el número de milisegundos desde la medianoche del 1 de enero 1970
  • getTime() Devuelve el número de milisegundos desde la medianoche 1 de enero, 1970

valueOf() devuelve una primitiva del valor, me quedaría lejos de él y trabajar con las opciones anteriores.

fuente: http://www.w3schools.com/jsref/jsref_obj_date.asp.

edit: también, su pedir por 1 Feb, 1970

uso esto, es peligroso ir solo:

var d=new Date(1970, 0, 1); 
document.write(d.getTime()); 

o

var d= Date.parse("Jan 1, 1970"); //Note, we don't use NEW keyword. 
document.write(d); 

Recuerde, epcoh es Wed Dec 31 1969 19:00:00 GMT-0500. Si usa .getTime(), verá la hora UTC Jue, 01 Ene 1970, 00:00:00 GMT +0000.

+2

'valueOf()' devuelve una representación de la fecha en una primitiva, que es un número en este caso. Esto hace que 'valueOf()' y 'getTime()' sean equivalentes para los objetos Date. –

+0

lo siguiente tampoco regresa; alert (Date.parse ("1970-1-1")/(86400 * 1000)) – Coen

+0

@Coen: Aún debe usar '0' como parámetro de mes y es mejor no usar el analizador para establecer una fecha, solo use 'new Date (1970, 0, 1)'. –

0

era el mes que debería haber sido 0 en combinación con una hora de diferencia con respecto a GMT

alerta ((new Date (1970, 0, 1 , 1, 0, 0, 0) .valueOf()));

produce 0