Obtenir une époque pour une date précise en utilisant Javascript

Réponses:

182

Vous pouvez créer un Dateobjet et faire appel getTimeà lui:

new Date(2010, 6, 26).getTime() / 1000
Michael Mrozek
la source
12
L'argument du mois pour le constructeur de date manque un peu de cohérence et est en fait basé sur zéro. Cela signifie que le 7 est août, vous devez donc soustraire 1 :-)
Andy E
6
@Andy - c'est une idée farfelue de compenser les mois de -1 tout en gardant le reste, et c'est exactement le genre de chose qui peut rendre une navette spatiale folle, si jamais JavaScript devait être utilisé là-bas :)
Anurag
6
Il vaut probablement mieux y aller: new Date ("2010-7-26"). GetTime () / 1000 pour ne pas avoir à penser aux décalages.
Vincent McNabb
5
@Vincent: n'analysera new Date("2010-7-26")pas dans Internet Explorer. Le constructeur de date s'appuie sur la méthode Date.parse () lorsqu'une chaîne est transmise, qui dépend de l'implémentation dans ECMA-262 3e édition et, par conséquent, notoirement inflexible dans IE.
Andy E
On pourrait minimiser les erreurs ou malentendus possibles en spécifiant également le fuseau horaire. Au moins les versions actuelles (Linux-) de Firefox, Opera et Chrome prennent en charge l'instanciation d'une date JavaScript comme new Date ("1er janvier 1970 GMT + 00: 00, 00:01"); ce qui réduit également la confusion sur le format de mois correct.
Michael Besteck
37
new Date("2016-3-17").valueOf() 

reviendra une longue époque

Jyo Banerjee
la source
2

Vous pouvez également utiliser la fonction Date.now ().

Neha M
la source
1

Certaines réponses n'expliquent pas les effets secondaires des variations du fuseau horaire pour l'objet Date JavaScript. Vous devriez donc envisager cette réponse si cela vous préoccupe.

Méthode 1: selon le fuseau horaire de la machine

Par défaut, JavaScript renvoie une date en tenant compte du fuseau horaire de la machine, le getTime()résultat varie donc d'un ordinateur à l'autre. Vous pouvez vérifier ce comportement en cours d'exécution:

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

Ce n'est pas un problème si vous voulez vraiment le temps écoulé depuis Epoch en tenant compte de votre fuseau horaire. Donc, si vous souhaitez obtenir l'heure depuis l'époque pour la date actuelle ou même une date spécifiée en fonction du fuseau horaire de l' ordinateur , vous êtes libre de continuer à utiliser cette méthode.

// 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éthode 2: Indépendant du fuseau horaire de la machine

Cependant, si vous souhaitez obtenir des variations de fuseau horaire et obtenir l'heure depuis l'époque pour une date spécifiée en UTC (c'est-à-dire indépendamment du fuseau horaire), vous devez utiliser la Date.UTCméthode ou décaler la date de votre fuseau horaire vers 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

Donc, en utilisant cette méthode (ou, alternativement, en soustrayant la différence), le résultat devrait être:

// 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)

IMO, à moins que vous ne sachiez ce que vous faites (voir la note ci-dessus), vous devriez préférer la méthode 2 , car elle est indépendante de la machine.


Note de fin

Bien que les recommandations de cette réponse, et depuis Date.UTCne fonctionnent pas sans une date / heure spécifiée, vous pouvez être enclin à utiliser l'approche alternative et à faire quelque chose comme ceci:

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" (?)

Cela n'a aucun sens et c'est probablement FAUX (vous modifiez la date). Soyez conscient de ne pas faire cela. Si vous voulez obtenir l'heure depuis l'époque à partir de la date et de l' heure actuelles , vous êtes probablement OK en utilisant la méthode 1 .

Diego Queiroz
la source
1

Date.parse()La méthode analyse une représentation sous forme de chaîne d'une date et renvoie le nombre de millisecondes depuis 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

Pour en savoir plus: Date.parse ()

Sourabh
la source
0
Number(new Date(2010, 6, 26))

Fonctionne de la même manière que les choses ci-dessus. Si vous avez besoin de secondes, n'oubliez pas de/ 1000

Andrii Los
la source