web-dev-qa-db-fra.com

Obtention de la date actuelle en millisecondes (UTC) (PAS d'utilisation de chaînes)

Eh bien, vous pourriez penser que cette question a déjà été posée, mais je ne le pense pas. Les solutions que j'ai lues ont toutes eu cette technique de "puzzle" (comme getUTCMonth() + getUTCMinutes + ...). Mais comme je veux seulement comparer les secondes écoulées entre deux dates UTC (!), Cela ne s'applique pas.

Comme tout le monde le sait, vous pouvez obtenir la date actuelle (non UTC) en:

var d = new Date();
var t_millis = d.getTime();

Mais ce n'est PAS ce que je veux. Je voudrais avoir la date système actuelle en UTC et en millisecondes, donc ne plaisante pas avec les chaînes du tout. AFAIK la variable t_millis Contiendra la valeur en millisecondes de l'horodatage actuel en GMT, pas UTC. (Puisque d est également en GMT. Sauf getTime () fait une sorte de conversion de fuseau horaire implicite, c'est-à-dire en ajoutant l'offset AVANT donnant les millisecondes, mais je n'en ai jamais lu nulle part)

N'y a-t-il donc vraiment pas d'autre moyen que d'ajouter le décalage à la valeur temporelle? Il me manque désespérément une fonction comme getUTCTimeMillis() connue dans d'autres langages.

17
syntaxerror

C'est une vieille question, mais pour le bien des nouveaux visiteurs, voici la réponse CORRECTE :

Date.now();

Il renvoie le nombre de millisecondes écoulées depuis le 1er janvier 1970 00:00:00 UTC

36
advncd

La valeur en millisecondes de l'heure va être la même quel que soit votre fuseau horaire. Autrement dit, il n'y a pas de fuseaux horaires sur la planète Terre qui diffèrent les uns des autres d'un nombre de millisecondes supérieur à zéro. (Ils peuvent différer d'un nombre entier d'heures ou même de minutes, mais pas de secondes ou de millisecondes.)

Cela dit, la valeur que vous récupérez à partir de getTime() est un horodatage relatif UTC. Si deux navigateurs Web situés à des endroits très différents du globe créent un objet Date en même temps, ils obtiendront tous les deux la même valeur de .getTime() (en supposant que les horloges sont synchronisées, ce qui est bien sûr très peu probable) .

Ici: 1338585185539 C'est un horodatage que je viens de recevoir de mon navigateur. Je suis à Austin, au Texas, et il est maintenant 4 h 13 dans l'après-midi (de sorte que l'horodatage sera légèrement avant). Branchez-le dans une instance Date sur votre machine et voyez ce qu'il dit.

( edit - pour la postérité, cet horodatage est le 1er juin 2012.)

19
Pointy

que diriez-vous:

var now = new Date();
var utc_now = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),  now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds());
console.log('UTC: ' + utc_now) // correct UTC time but wrong timezone!
console.log('UTC (in ms): ' + utc_now.getTime())
7
kirpit

J'ai utilisé cette fonction pour résoudre le problème.

function getUTCNow()
{
    var now = new Date();
    var time = now.getTime();
    var offset = now.getTimezoneOffset();
    offset = offset * 60000;
    return time - offset;
}
  • La fonction getTime renvoie le nombre de millisecondes écoulées depuis le 1er janvier 1970 00:00:00 dans le fuseau horaire du client.
  • getTimezoneOffset renvoie le décalage en minutes entre le fuseau horaire du client et UTC.
  • offset = offset * 60000; cette opération transforme les minutes en millisecondes.
  • en soustrayant le décalage obtenir le nombre de millisecondes écoulées depuis le 1er janvier 1970 00:00:00 UTC.
6
Blacknet

Pour obtenir l'horodatage d'une date en UTC, vous devez prendre en considération le fuseau horaire et l'heure d'été pour cette date. Par exemple, une date en janvier ou en juillet peut signifier une différence d'une heure.

L'option ci-dessous fait exactement cela.

Date.prototype.getUTCTime = function () {
    return this.getTime() - (this.getTimezoneOffset() * 60000);
};

Il peut être utilisé comme dans:

var date = new Date();
var timestamp = date.getUTCTime();
1
Darlesson