Je stocke du temps dans une base de données MySQL en tant qu'horodatage Unix et qui est envoyé à du code JavaScript. Comment pourrais-je obtenir juste du temps?
Par exemple, au format HH / MM / SS.
Je stocke du temps dans une base de données MySQL en tant qu'horodatage Unix et qui est envoyé à du code JavaScript. Comment pourrais-je obtenir juste du temps?
Par exemple, au format HH / MM / SS.
Réponses:
let unix_timestamp = 1549312452
// 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);
console.log(formattedTime);
Pour plus d'informations sur l'objet Date, reportez-vous à MDN ou à la spécification ECMAScript 5 .
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));
var min = a.getMinutes() < 10 ? '0' + a.getMinutes() : a.getMinutes(); var sec = a.getSeconds() < 10 ? '0' + a.getSeconds() : a.getSeconds();
getMonth()
renvoie un numéro de mois entre 0 et 11, donc a.getMonth() - 1
c'est faux.
JavaScript fonctionne en millisecondes, vous devrez donc d'abord convertir l'horodatage UNIX de quelques secondes en millisecondes.
var date = new Date(UNIX_Timestamp * 1000);
// Manipulate JavaScript Date object here...
Je suis amateur de la Date.format()
bibliothèque de Jacob Wright , qui implémente le formatage de date JavaScript dans le style de la date()
fonction PHP .
new Date(unix_timestamp * 1000).format('h:i:s')
format is not a function
. Mais cela fonctionne apparemment: stackoverflow.com/a/34015511/7550772
Utilisation:
var s = new Date(1504095567183).toLocaleDateString("en-US")
console.log(s)
// expected output "8/30/2017"
et pour le temps:
var s = new Date(1504095567183).toLocaleTimeString("en-US")
console.log(s)
// expected output "3:19:27 PM"
toLocaleString
comprend à la fois la date et l'heure.
Voici la solution one-liner 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"
La méthode
Date.prototype.toISOString()
renvoie l'heure au format ISO 8601 étendu simplifié , qui est toujours de 24 ou 27 caractères (c'estYYYY-MM-DDTHH:mm:ss.sssZ
-à- dire ou±YYYYYY-MM-DDTHH:mm:ss.sssZ
respectivement). Le fuseau horaire est toujours un décalage UTC nul.
NB: Cette solution ne nécessite aucune bibliothèque tierce et est prise en charge dans tous les navigateurs modernes et moteurs JavaScript.
toTimeString
ne fonctionnait pas bien avec les fuseaux horaires. Malheureusement, votre modification a été rejetée avant que je ne la voie. Cependant, je suggère d'utiliser à la toISOString
place, car il toGMTString
est obsolète et peut renvoyer des résultats différents sur différentes plates-formes.
Je penserais à utiliser une bibliothèque comme momentjs.com , ce qui rend cela très simple:
Basé sur un horodatage 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") );
console.log
exemples, j'étais confus au sujet du format en raison du /
, mais cela m'a beaucoup aidé.
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 nombre de millisecondes 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)
solution à une ligne 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"
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 obtenir que du temps en utilisant ceci:
var timeString = moment(1439198499).format("HH:mm:ss");
Le problème avec les solutions susmentionnées est que si l'heure, la minute ou la seconde n'a qu'un seul chiffre (c'est-à-dire 0-9), l'heure serait erronée, par exemple, elle pourrait être 2: 3: 9, mais elle devrait plutôt être 02: 03:09.
Selon cette page, il semble être une meilleure solution pour utiliser la méthode "toLocaleTimeString" de Date.
date.toLocaleTimeString()
toTimeString
méthode. Vérifiez ici: stackoverflow.com/a/35890537/1249581 .
Une autre façon - à partir d'une date ISO 8601 .
var timestamp = 1293683278;
var date = new Date(timestamp * 1000);
var iso = date.toISOString().match(/(\d{2}:\d{2}:\d{2})/)
alert(iso[1]);
Basé sur la réponse de @ shomrat, voici un extrait qui écrit automatiquement datetime comme ceci (un peu similaire à la date de réponse 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 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;
}
La solution moderne qui n'a pas besoin d'une bibliothèque de 40 Ko:
Intl.DateTimeFormat est la manière impérialiste non culturellement 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 ) ) );
Mon horodatage est récupéré depuis 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 généreront ces résultats
1541415288860
Mon Nov 05 2018
2018
54
48
13
1:54:48 PM
Il existe un tas de méthodes qui fonctionnent parfaitement avec les horodatages. Je ne peux pas tous les énumérer
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
Faites attention au problème zéro avec certaines des réponses. Par exemple, l'horodatage 1439329773
serait converti par erreur en12/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ésultat maintenant:
12/08/2015 00:49
// 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());
Voir Convertisseur date / époque .
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;
Vous pouvez utiliser la fonction suivante pour convertir votre horodatage au HH:MM:SS
format:
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 de séparateur, il utilise :
comme séparateur (par défaut):
time = convertTime(1061351153); // --> OUTPUT = 05:45:53
Si vous souhaitez l'utiliser /
comme séparateur, passez-le simplement comme deuxième paramètre:
time = convertTime(920535115, '/'); // --> OUTPUT = 09/11/55
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 ce violon .
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
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;
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
Le code ci-dessous fournit également des millisecs à 3 chiffres, idéal pour les préfixes de journal de 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);
convertir les horodatages en chaîne de date en js
moment().format('YYYY-MM-DD hh:mm:ss');
// "2020-01-10 11:55:43"
moment(1578478211000).format('YYYY-MM-DD hh:mm:ss');
// "2020-01-08 06:10:11"
day.js
github.com/iamkun/dayjs
La réponse donnée par @Aron fonctionne, mais cela n'a pas fonctionné pour moi car j'essayais de convertir l'horodatage à partir de 1980. J'ai donc apporté quelques modifications comme suit
function ConvertUnixTimeToDateForLeap(UNIX_Timestamp) {
var dateObj = new Date(1980, 0, 1, 0, 0, 0, 0);
dateObj.setSeconds(dateObj.getSeconds() + UNIX_Timestamp);
return dateObj;
}
document.body.innerHTML = 'TimeStamp : ' + ConvertUnixTimeToDateForLeap(1269700200);
Donc, si vous avez un horodatage à partir d'une autre décennie, utilisez-le. Cela m'a sauvé beaucoup de maux de tête.