web-dev-qa-db-fra.com

Convertir un horodatage Unix en temps en JavaScript

Je stocke le temps dans une base de données MySQL comme un horodatage Unix et cela est envoyé à du code JavaScript. Comment pourrais-je en tirer le temps?

Par exemple, au format HH/MM/SS.

915
roflwaffle
// Create a new JavaScript Date object based on the timestamp
// multiplied by 1000 so that the argument is in milliseconds, not seconds.
var date = new Date(unix_timestamp*1000);
// Hours part from the timestamp
var hours = date.getHours();
// Minutes part from the timestamp
var minutes = "0" + date.getMinutes();
// Seconds part from the timestamp
var seconds = "0" + date.getSeconds();

// Will display time in 10:30:23 format
var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);

Pour plus d'informations sur l'objet Date, veuillez vous reporter à MDN ou à la spécification ECMAScript 5 .

1424
Aron Rotteveel

function timeConverter(UNIX_timestamp){
  var a = new Date(UNIX_timestamp * 1000);
  var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
  var year = a.getFullYear();
  var month = months[a.getMonth()];
  var date = a.getDate();
  var hour = a.getHours();
  var min = a.getMinutes();
  var sec = a.getSeconds();
  var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec ;
  return time;
}
console.log(timeConverter(0));

251
shomrat

JavaScript fonctionne en millisecondes. Vous devez donc d'abord convertir l'horodatage UNIX de secondes en millisecondes.

var date = new Date(UNIX_Timestamp * 1000);
// Manipulate JavaScript Date object here...
154
Steve Harrison

Je fais partie de la bibliothèque Date.format() de Jacob Wright, qui implémente le formatage de date JavaScript dans le style de PHP date() .

new Date(unix_timestamp * 1000).format('h:i:s')
73
Brad Koch

Voici la solution one-line la plus courte pour formater les secondes en hh:mm:ss:

/**
 * Convert seconds to time string (hh:mm:ss).
 *
 * @param Number s
 *
 * @return String
 */
function time(s) {
    return new Date(s * 1e3).toISOString().slice(-13, -5);
}

console.log( time(12345) );  // "03:25:45"

Méthode Date.prototype.toISOString() renvoie le temps en format étendu simplifié ISO 8601 , qui contient toujours une longueur de 24 ou 27 caractères (respectivement YYYY-MM-DDTHH:mm:ss.sssZ ou ±YYYYYY-MM-DDTHH:mm:ss.sssZ). Le fuseau horaire est toujours zéro décalage UTC.

N.B .: Cette solution ne nécessite aucune bibliothèque tierce et est prise en charge par tous les navigateurs et moteurs JavaScript modernes.

45
VisioN

Utilisation:

var s = new Date(1504095567183).toLocaleDateString("en-US")
// expected output "8/30/2017"   

et pour le temps:

var s = new Date(1504095567183).toLocaleTimeString("en-US") 
// expected output "3:19:27 PM"`

voir Date.prototype.toLocaleDateString ()

30
Dan Alboteanu

Je penserais à utiliser une bibliothèque comme momentjs.com , cela rend cela très simple:

Basé sur un timestamp Unix:

var timestamp = moment.unix(1293683278);
console.log( timestamp.format("HH/mm/ss") );

Basé sur une chaîne de date MySQL:

var now = moment("2010-10-10 12:03:15");
console.log( now.format("HH/mm/ss") );
26
homtg

L'horodatage UNIX est le nombre de secondes depuis 00:00:00 UTC le 1er janvier 1970 (selon Wikipedia ).

L'argument de l'objet Date en Javascript est le numéro miliseconds depuis 00:00:00 UTC le 1er janvier 1970 (selon la documentation Javascript de W3Schools ).

Voir le code ci-dessous par exemple:

    function tm(unix_tm) {
        var dt = new Date(unix_tm*1000);
        document.writeln(dt.getHours() + '/' + dt.getMinutes() + '/' + dt.getSeconds() + ' -- ' + dt + '<br>');

    }

tm(60);
tm(86400);

donne:

1/1/0 -- Thu Jan 01 1970 01:01:00 GMT+0100 (Central European Standard Time)
1/0/0 -- Fri Jan 02 1970 01:00:00 GMT+0100 (Central European Standard Time)
20
Grzegorz Gierlik

En utilisant Moment.js , vous pouvez obtenir l’heure et la date comme ceci:

var dateTimeString = moment(1439198499).format("DD-MM-YYYY HH:mm:ss");

Et vous ne pouvez avoir que du temps en utilisant ceci:

var timeString = moment(1439198499).format("HH:mm:ss");
16
Peter T.

Le problème des solutions susmentionnées est que, si heure, minute ou seconde n’a qu’un chiffre (c’est-à-dire 0 à 9), l’heure serait fausse, par exemple ça pourrait être 2: 3: 9, mais ça devrait plutôt être 02:03:09.

Selon cette page il semble être une meilleure solution pour utiliser la méthode "toLocaleTimeString" de Date.

15
Bernie

Pour l'instant, vous devez utiliser l'horodatage Unix:

var dateTimeString = moment.unix(1466760005).format("DD-MM-YYYY HH:mm:ss");
13
Valix85

Une autre façon - à partir d'une ISO 8601 date.

var timestamp = 1293683278;
var date = new Date(timestamp*1000);
var iso = date.toISOString().match(/(\d{2}:\d{2}:\d{2})/)
alert(iso[1]);
13
deadrunk

Basé sur la réponse de @ shomrat, voici un extrait qui écrit automatiquement la date/heure comme ceci (un peu similaire à la date de réponses de StackOverflow: answered Nov 6 '16 at 11:51):

today, 11:23

ou

yersterday, 11:23

ou (si différent mais même année qu'aujourd'hui)

6 Nov, 11:23

ou (si une autre année qu'aujourd'hui)

6 Nov 2016, 11:23

function timeConverter(t) {     
    var a = new Date(t * 1000);
    var today = new Date();
    var yesterday = new Date(Date.now() - 86400000);
    var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var year = a.getFullYear();
    var month = months[a.getMonth()];
    var date = a.getDate();
    var hour = a.getHours();
    var min = a.getMinutes();
    if (a.setHours(0,0,0,0) == today.setHours(0,0,0,0))
        return 'today, ' + hour + ':' + min;
    else if (a.setHours(0,0,0,0) == yesterday.setHours(0,0,0,0))
        return 'yesterday, ' + hour + ':' + min;
    else if (year == today.getFullYear())
        return date + ' ' + month + ', ' + hour + ':' + min;
    else
        return date + ' ' + month + ' ' + year + ', ' + hour + ':' + min;
}
9
Basj

La solution moderne ne nécessitant pas de bibliothèque de 40 Ko:

Intl.DateTimeFormat est la méthode non culturellement impérialiste de formater une date/heure.

// Setup once
var options = {
    //weekday: 'long',
    //month: 'short',
    //year: 'numeric',
    //day: 'numeric',
    hour: 'numeric',
    minute: 'numeric',
    second: 'numeric'
},
intlDate = new Intl.DateTimeFormat( undefined, options );

// Reusable formatter
var timeStamp = 1412743273;
console.log( intlDate.format( new Date( 1000 * timeStamp ) ) );
8
Adria
function getTIMESTAMP() {
      var date = new Date();
      var year = date.getFullYear();
      var month = ("0"+(date.getMonth()+1)).substr(-2);
      var day = ("0"+date.getDate()).substr(-2);
      var hour = ("0"+date.getHours()).substr(-2);
      var minutes = ("0"+date.getMinutes()).substr(-2);
      var seconds = ("0"+date.getSeconds()).substr(-2);

      return year+"-"+month+"-"+day+" "+hour+":"+minutes+":"+seconds;
    }
//2016-01-14 02:40:01
6
synan54

Faites attention au problème zéro avec certaines des réponses. Par exemple, l'horodatage 1439329773 serait converti par erreur en 12/08/2015 0:49.

Je suggère d'utiliser les éléments suivants pour résoudre ce problème:

var timestamp = 1439329773; // replace your timestamp
var date = new Date(timestamp * 1000);
var formattedDate = ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear() + ' ' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2);
console.log(formattedDate);

Résultats maintenant en:

12/08/2015 00:49
6
TechWisdom
// Format value as two digits 0 => 00, 1 => 01
function twoDigits(value) {
   if(value < 10) {
    return '0' + value;
   }
   return value;
}

var date = new Date(unix_timestamp*1000);
// display in format HH:MM:SS
var formattedTime = twoDigits(date.getHours()) 
      + ':' + twoDigits(date.getMinutes()) 
      + ':' + twoDigits(date.getSeconds());
5
Fireblaze

Voir Date/Epoch Converter.

Vous devez ParseInt, sinon cela ne fonctionnerait pas:


if (!window.a)
    window.a = new Date();

var mEpoch = parseInt(UNIX_timestamp);

if (mEpoch < 10000000000)
    mEpoch *= 1000;

------
a.setTime(mEpoch);
var year = a.getFullYear();
...
return time;
4
shams

Vous pouvez utiliser la fonction suivante pour convertir votre horodatage au format HH:MM:SS:

var convertTime = function(timestamp, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    var date = timestamp ? new Date(timestamp * 1000) : new Date();
    return [
        pad(date.getHours()),
        pad(date.getMinutes()),
        pad(date.getSeconds())
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

Sans passer un séparateur, il utilise : comme séparateur (par défaut):

time = convertTime(1061351153); // --> OUTPUT = 05:45:53

Si vous souhaitez utiliser / en tant que séparateur, transmettez-le simplement comme second paramètre:

time = convertTime(920535115, '/'); // --> OUTPUT = 09/11/55

Démo

var convertTime = function(timestamp, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    var date = timestamp ? new Date(timestamp * 1000) : new Date();
    return [
        pad(date.getHours()),
        pad(date.getMinutes()),
        pad(date.getSeconds())
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

document.body.innerHTML = '<pre>' + JSON.stringify({
    920535115 : convertTime(920535115, '/'),
    1061351153 : convertTime(1061351153, ':'),
    1435651350 : convertTime(1435651350, '-'),
    1487938926 : convertTime(1487938926),
    1555135551 : convertTime(1555135551, '.')
}, null, '\t') +  '</pre>';

Voir aussi this Fiddle .

4
John Slegers

Mon horodatage est extrait d'un backend PHP. J'ai essayé toutes les méthodes ci-dessus et cela n'a pas fonctionné. Je suis ensuite tombé sur un tutoriel qui a fonctionné:

var d =val.timestamp;
var date=new Date(+d); //NB: use + before variable name

console.log(d);
console.log(date.toDateString());
console.log(date.getFullYear());
console.log(date.getMinutes());
console.log(date.getSeconds());
console.log(date.getHours());
console.log(date.toLocaleTimeString());

les méthodes ci-dessus vont générer ces résultats

1541415288860
Mon Nov 05 2018 
2018 
54 
48 
13
1:54:48 PM

Il existe de nombreuses méthodes qui fonctionnent parfaitement avec les horodatages. Je ne peux pas tous les lister

3
james ace
 function getDateTimeFromTimestamp(unixTimeStamp) {
    var date = new Date(unixTimeStamp);
    return ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear() + ' ' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2);
  }

var myTime = getDateTimeFromTimestamp(1435986900000);
console.log(myTime); // output 01/05/2000 11:00
2
Ashish Gupta
function timeConverter(UNIX_timestamp){
 var a = new Date(UNIX_timestamp*1000);
     var hour = a.getUTCHours();
     var min = a.getUTCMinutes();
     var sec = a.getUTCSeconds();
     var time = hour+':'+min+':'+sec ;
     return time;
 }
2
shomrat

Si vous souhaitez convertir la durée Unix en heures, minutes et secondes réelles, vous pouvez utiliser le code suivant:

var hours = Math.floor(timestamp / 60 / 60);
var minutes = Math.floor((timestamp - hours * 60 * 60) / 60);
var seconds = Math.floor(timestamp - hours * 60 * 60 - minutes * 60 );
var duration = hours + ':' + minutes + ':' + seconds;
2
milkovsky
function getDateTime(unixTimeStamp) {

    var d = new Date(unixTimeStamp);
    var h = (d.getHours().toString().length == 1) ? ('0' + d.getHours()) : d.getHours();
    var m = (d.getMinutes().toString().length == 1) ? ('0' + d.getMinutes()) : d.getMinutes();
    var s = (d.getSeconds().toString().length == 1) ? ('0' + d.getSeconds()) : d.getSeconds();

    var time = h + '/' + m + '/' + s;

    return time;
}

var myTime = getDateTime(1435986900000);
console.log(myTime); // output 01/15/00
1
Bhaumik Mehta

Le code ci-dessous fournit également des millisecs à 3 chiffres, idéal pour les préfixes de journal de la console:

const timeStrGet = date => {
    const milliSecsStr = date.getMilliseconds().toString().padStart(3, '0') ;
    return `${date.toLocaleTimeString('it-US')}.${milliSecsStr}`;
};

setInterval(() => console.log(timeStrGet(new Date())), 299);

0
tivoni

la solution one-liner la plus courte pour formater les secondes en hh: mm: ss: variante:

console.log(new Date(1549312452 * 1000).toISOString().slice(0, 19).replace('T', ' '));
// "2019-02-04 20:34:12"

0
Luis David