Obtenga la época para una fecha específica usando Javascript


Respuestas:


182

Puede crear un Dateobjeto e invocarlo getTime:

new Date(2010, 6, 26).getTime() / 1000

12
El argumento del mes para el constructor de fecha carece de un poco de coherencia y en realidad se basa en cero. Esto significa que el 7 es agosto, por lo que debe restar 1 :-)
Andy E

6
@Andy: es una idea loca compensar los meses en -1 mientras se mantiene el resto, y es exactamente el tipo de cosa que puede hacer que un transbordador espacial se vuelva loco, si alguna vez se usara JavaScript allí :)
Anurag

6
Probablemente sea mejor ir: new Date ("2010-7-26"). GetTime () / 1000 para que no tenga que pensar en compensaciones.
Vincent McNabb

5
@Vincent: new Date("2010-7-26")no analizará en Internet Explorer. El constructor de fecha se basa en el método Date.parse () cuando se pasa una cadena, que depende de la implementación en la 3ª edición de ECMA-262 y, como resultado, es notoriamente inflexible en IE.
Andy E

También se podrían minimizar los posibles errores o malentendidos especificando la zona horaria. Al menos las versiones reales (Linux-) de Firefox, Opera y Chrome admiten la instanciación de una fecha de JavaScript como nueva fecha ("1 de enero de 1970 GMT + 00: 00, 00:01"); lo que también reduce la confusión sobre el formato de mes correcto.
Michael Besteck



2

También puede utilizar la función Date.now ().


1

Algunas respuestas no explican los efectos secundarios de las variaciones en la zona horaria del objeto Fecha de JavaScript. Por lo tanto, debe considerar esta respuesta si esto le preocupa.

Método 1: depende de la zona horaria de la máquina

De forma predeterminada, JavaScript devuelve una fecha teniendo en cuenta la zona horaria de la máquina, por lo que el getTime()resultado varía de una computadora a otra. Puede comprobar este comportamiento ejecutando:

new Date(1970, 0, 1, 0, 0, 0, 0).getTime()
    // Since 1970-01-01 is Epoch, you may expect ZERO
    // but in fact the result varies based on computer's timezone

Esto no es un problema si realmente quieres el tiempo desde Epoch considerando tu zona horaria. Entonces, si desea obtener el tiempo desde Epoch para la Fecha actual o incluso una Fecha específica basada en la zona horaria de la computadora , puede continuar usando este método.

// Seconds since Epoch (Unix timestamp format)

new Date().getTime() / 1000             // local Date/Time since Epoch in seconds
new Date(2020, 11, 1).getTime() / 1000  // time since Epoch to 2020-12-01 00:00 (local timezone) in seconds

// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)

new Date().getTime()                    // local Date/Time since Epoch in milliseconds
new Date(2020,  0, 2).getTime()         // time since Epoch to 2020-01-02 00:00 (local timezone) in milliseconds

// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)

Método 2: independiente de la zona horaria de la máquina

Sin embargo, si desea obtener un viaje de variaciones en la zona horaria y obtener el tiempo desde Epoch para una fecha específica en UTC (es decir, independiente de la zona horaria), debe usar el Date.UTCmétodo o cambiar la fecha de su zona horaria a UTC:

Date.UTC(1970,  0, 1)
    // should be ZERO in any computer, since it is ZERO the difference from Epoch

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()  // difference in milliseconds between your timezone and UTC
    (new Date(1970,  0, 1).getTime() - timezone_diff)
    // should be ZERO in any computer, since it is ZERO the difference from Epoch

Entonces, usando este método (o, alternativamente, restando la diferencia), el resultado debería ser:

// Seconds since Epoch (Unix timestamp format)

Date.UTC(2020,  0, 1) / 1000  // time since Epoch to 2020-01-01 00:00 UTC in seconds

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()
    (new Date(2020,  0, 1).getTime() - timezone_diff) / 1000  // time since Epoch to 2020-01-01 00:00 UTC in seconds
    (new Date(2020, 11, 1).getTime() - timezone_diff) / 1000  // time since Epoch to 2020-12-01 00:00 UTC in seconds

// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)

Date.UTC(2020,  0, 2)   // time since Epoch to 2020-01-02 00:00 UTC in milliseconds

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()
    (new Date(2020,  0, 2).getTime() - timezone_diff)         // time since Epoch to 2020-01-02 00:00 UTC in milliseconds

// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)

En mi opinión, a menos que sepa lo que está haciendo (consulte la nota anterior), debería preferir el método 2 , ya que es independiente de la máquina.


Nota final

Aunque las recomendaciones en esta respuesta, y dado Date.UTCque no funcionan sin una fecha / hora especificada, es posible que desee utilizar el enfoque alternativo y hacer algo como esto:

const timezone_diff = new Date(1970, 0, 1).getTime()
(new Date().getTime() - timezone_diff)  // <-- !!! new Date() without arguments
    // means "local Date/Time subtracted by timezone since Epoch" (?)

Esto no tiene ningún sentido y probablemente sea INCORRECTO (está modificando la fecha). Tenga cuidado de no hacer esto. Si desea obtener el tiempo desde Epoch a partir de la fecha Y HORA actuales , lo más probable es que esté bien usando el Método 1 .


1

Date.parse()El método analiza una representación de cadena de una fecha y devuelve el número de milisegundos desde January 1, 1970, 00:00:00 UTC.

const unixTimeZero = Date.parse('01 Jan 1970 00:00:00 GMT');
const javaScriptRelease = Date.parse('04 Dec 1995 00:12:00 GMT');

console.log(unixTimeZero);
// expected output: 0

console.log(javaScriptRelease);
// expected output: 818035920000

Explore más en: Date.parse ()


0
Number(new Date(2010, 6, 26))

Funciona de la misma manera que las cosas anteriores. Si necesitas segundos, no olvides/ 1000

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.