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?

Georgevich
la source
3
Est-ce que cela aide: stackoverflow.com/questions/847185/…
James Hulse
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
Voici ce que je reçois img841.imageshack.us/i/screenshot20110324at113.png
georgevich

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]
KooiInc
la source
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() );

Shouvik
la source
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;
}
golakers
la source
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)
Hossein
la source
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.

lutte4vie
la source