48 votes

Javascript convertit les secondes en un objet date

Comment puis-je convertir les secondes en un objet datetime en javascript.

Exemples :

1.3308313703571

1.6324722385401

Il s'agit d'une série de points et du moment où ils se sont produits. Je comprends 1,23323 plus que les secondes, mais je ne peux pas changer la valeur, étant tirée d'une api.

0 votes

Quel type de date-heure ces nombres à virgule flottante représentent-ils ?

0 votes

Il s'agit d'une série de secondes, en partant de zéro. Il s'agit simplement d'une série de points représentés par le moment où ils se sont produits.

2 votes

Je pense que le problème que nous rencontrons ici est que les exemples que vous voulez convertir n'ont pas de sens. Est-ce que c'est censé être le nombre de secondes à partir d'un moment précis dans le temps (1,3 seconde après le 1er janvier 1970 ?) ?

91voto

UVM Points 5802

Vous pouvez essayer comme ça :

function toDateTime(secs) {
    var t = new Date(1970, 0, 1); // Epoch
    t.setSeconds(secs);
    return t;
}

Info sur date d'époque .

6 votes

Dans mon cas, cette réponse ne donne pas la bonne réponse car l'info sur le fuseau horaire semble étrange. J'ai essayé la solution de @ariscris, en remplaçant "t.setSeconds(secs) ;" par "t.setTime(secs * 1000)", j'ai obtenu le bon résultat.

1 votes

Cette solution est affectée par le fuseau horaire du système, new Date(1970, 0, 1).toISOString() sorties 1969-12-31T21:00:00.000Z (GMT+0300 dans mon cas). setSeconds est également dit être à l'heure locale et ne donne pas le résultat escompté même si la date de base est en fait un début d'époque UTC correct.

3 votes

new Date(0) fixe la date au 1er janvier 1970 en heure locale. Donc t.setSeconds(secs) obtient l'heure actuelle en heure locale. Cela fonctionne parfaitement si secs est l'horodatage UTC en secondes (généralement envoyé par le serveur).

65voto

Artur Klesun Points 2708

Vous pouvez passer le timestamp unix en millisecondes comme argument à la fonction Date constructeur :

var secs = 30;
new Date(secs * 1000);

Sorties :

Date 1970-01-01T00:00:30.000Z

3 votes

Cette réponse est beaucoup plus propre !

0 votes

Dans mon cas, cela ajoute 2 heures supplémentaires de décalage horaire.

6voto

srolfe26 Points 79

La réponse de @UVM est utile, mais légèrement incomplète si vous avez affaire à des fuseaux horaires (c'est-à-dire l'heure UTC par rapport à l'heure locale). Avec les fuseaux horaires, commencez par UTC en utilisant Date.UTC et Date.setUTCSeconds pour obtenir une date et une heure UTC réelles.

function toDateTime(secs) {
    var t = new Date(Date.UTC(1970, 0, 1)); // Epoch
    t.setUTCSeconds(secs);
    return t;
}

Vous pouvez ensuite utiliser une bibliothèque comme Moment pour le convertir/formater en fonction du fuseau horaire local.

1voto

run.revelations Points 11

La question semble avoir déjà reçu une réponse, mais cela peut être utile pour ceux qui tentent de faire quelque chose de similaire à la méthode Time.at() de Ruby.

function formatDateTime(input){
       var epoch = new Date(0);
       epoch.setSeconds(parseInt(input));
       var date = epoch.toISOString();
       date = date.replace('T', ' ');
       return date.split('.')[0].split(' ')[0] + ' ' + epoch.toLocaleTimeString().split(' ')[0];
};

1voto

Vos valeurs d'exemple ont une décimale on dirait que vous essayez de convertir 1.quelque secondes en une date

En attendant, regardez cet exemple aquí sur la conversion correcte des secondes en date vous pourriez voir leurs sources js.

4 votes

Merci, cela fonctionne. Voici le code : var d = new Date(); d.setTime(secs * 1000);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X