Horodatage au format lisible par l'homme


89

Eh bien, j'ai un problème étrange lors de la conversion de l'horodatage Unix en représentation humaine en utilisant javascript

Voici l'horodatage

1301090400

Ceci est mon javascript

var date = new Date(timestamp * 1000);
var year    = date.getFullYear();
var month   = date.getMonth();
var day     = date.getDay();
var hour    = date.getHours();
var minute  = date.getMinutes();
var seconds = date.getSeconds();  

Je m'attendais à ce que les résultats soient 2011 2, 25 22 00 00. Mais c'est 2011, 2, 6, 0, 0, 0 Qu'est-ce que je rate?



C'est la même chose que je fais
georgevich

J'ai essayé cela dans la console Firefox Firebug et j'ai obtenu le résultat attendu. Quel navigateur / système d'exploitation utilisez-vous?
andrewmu

J'ai créé un jsfiddle et il semble fonctionner correctement : jsfiddle.net/9SUqX (j'ai testé sur Opera)
James Hulse

Réponses:


100

getDay()renvoie le jour de la semaine. Pour obtenir la date, utilisez date.getDate(). getMonth()récupère le mois, mais le mois est basé sur zéro, donc l'utilisation getMonth()+1devrait vous donner le bon mois. La valeur de l'heure semble être correcte ici, bien que l'heure soit 23 ici (GMT + 1). Si vous voulez des valeurs universelles, ajoutez UTCaux méthodes (par exemple date.getUTCFullYear(), date.getUTCHours())

var timestamp = 1301090400,
date = new Date(timestamp * 1000),
datevalues = [
   date.getFullYear(),
   date.getMonth()+1,
   date.getDate(),
   date.getHours(),
   date.getMinutes(),
   date.getSeconds(),
];
alert(datevalues); //=> [2011, 3, 25, 23, 0, 0]

1
Vous suggérez de l'aide avec la date, mais je ne peux toujours pas comprendre ce qui ne va pas avec les heures, les minutes et les secondes
georgevich

7
@george vous ne manquez rien. Ces valeurs sont des entiers, donc ne peuvent pas avoir une valeur comme "00". Vous pouvez l'ajouter vous-même facilement, par exempleminute = (minute < 10 ? "0" : "") + minute;
Shadow Wizard is Ear For You

@georgevich: dans quel fuseau horaire êtes-vous? Que se passe-t-il si vous utilisez date.getUTCHours()?
KooiInc

1
GMT + 2 Le résultat de date.getUTCHours () est 19
georgevich

GMT + 2, donc 22h de temps universel = 0h votre temps. Voici un jsfiddle utilisant des valeurs UTC: jsfiddle.net/EZFG9 .
KooiInc

47
var newDate = new Date();
newDate.setTime(unixtime*1000);
dateString = newDate.toUTCString();

unixtimeest l'heure renvoyée par votre base de données sql. Voici un violon si cela aide.

Par exemple, en l'utilisant pour l'heure actuelle:

document.write( new Date().toUTCString() );


J'ai trouvé cette réponse, et la réponse acceptée ici [* .toString ()] pour être utile: stackoverflow.com/questions/13622142/... Voici l'essentiel: gist.github.com/victoriastuart/b9fb09b890ef88755538b24b0207fece
Victoria Stuart

1
"unixtime is undefined"est ce que j'obtiens ici
Katie

1
Quoi qu'il en soit, il peut être facilement transformé en new Date(1480966325 * 1000).toUTCString()
oneliner

9

voici la réponse de kooilnc avec des 0 rembourrés

function getFormattedDate() {
    var date = new Date();

    var month = date.getMonth() + 1;
    var day = date.getDate();
    var hour = date.getHours();
    var min = date.getMinutes();
    var sec = date.getSeconds();

    month = (month < 10 ? "0" : "") + month;
    day = (day < 10 ? "0" : "") + day;
    hour = (hour < 10 ? "0" : "") + hour;
    min = (min < 10 ? "0" : "") + min;
    sec = (sec < 10 ? "0" : "") + sec;

    var str = date.getFullYear() + "-" + month + "-" + day + "_" +  hour + ":" + min + ":" + sec;

    /*alert(str);*/

    return str;
}

7

Les heures, minutes et secondes dépendent du fuseau horaire de votre système d'exploitation. En GMT (UST), il est 22:00:00 mais dans différents fuseaux horaires, cela peut être n'importe quoi. Ajoutez donc le décalage du fuseau horaire à l'heure pour créer la date GMT:

var d = new Date();
date = new Date(timestamp*1000 + d.getTimezoneOffset() * 60000)

Pourquoi horodatage fois 1000?
Bruno Gomes

2
@BrunoGomes il suppose que l'horodatage est en secondes, tandis que javascript le fait en millisecondes.
Brent

7

utiliser Date.prototype.toLocaleTimeString()comme documenté ici

veuillez noter l'exemple de locale en-US dans l'url.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.