人間が読める形式のタイムスタンプ


89

まあ、javascriptを使用してUNIXタイムスタンプから人間の表現に変換するときに奇妙な問題があります

こちらがタイムスタンプです

1301090400

これは私の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();  

結果は2011 2、25 22 00 00になると予想しました。しかし、2011、2、6、0、0、0です。



それは私がやっていることと同じです
ジョルゲビッチ

私はこれをFirefox Firebugコンソールで試して、期待した結果を得ました。どのブラウザ/ OSを使用していますか?
andrewmu

私はjsfiddleを作成し、それは正常に動作するようです:jsfiddle.net/9SUqX(私はOperaでテストしました)
James Hulse

回答:


100

getDay()曜日を返します。日付を取得するには、を使用しますdate.getDate()getMonth()月を取得しますが、月はゼロベースなので、を使用getMonth()+1すると正しい月が得られます。時間はここでは23(GMT + 1)ですが、ここでは時間の値は問題ないようです。普遍的な値が必要な場合はUTC、メソッドに追加します(たとえば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
あなたの提案は日付で助けますが、時間、分、秒の何が問題なのかはまだわかりません
georgevich

7
@georgeお見逃しなく。これらの値は整数であるため、「00」のような値を持つことはできません。たとえば、自分で簡単に追加できますminute = (minute < 10 ? "0" : "") + minute;
シャドウウィザードは、あなたのためのイヤーです

@georgevich:あなたはどのタイムゾーンにいますか?使用するとどうなりますdate.getUTCHours()か?
KooiInc 2011年

1
GMT + 2 date.getUTCHours()の結果は19
georgevich

GMT + 2、つまり22時間の世界時= 0時間の時間。UTC値を使用したjsfiddleは次のとおりです:jsfiddle.net/EZFG9
KooiInc 2011年

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

unixtimeあなたのSQLデータベースから返された時間はどこですか?役立つ場合は、ここにフィドルがあります。

たとえば、現在の時間にそれを使用します。

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


私はこの答えを見つけ、ここで受け入れられた回答を使用しました[* .toString()]が有用です: stackoverflow.com/questions/13622142/… ここに要点があります: gist.github.com/victoriastuart/b9fb09b890ef88755538b24b0207fece
Victoria Stuart

1
"unixtime is undefined"私がここ
ケイティ

1
とにかく、それは簡単にワンライナーで回すことができますnew Date(1480966325 * 1000).toUTCString()
Rozkalns

9

これはkooilncの答えで、0が埋め込まれています

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

時間、分、秒は、オペレーティングシステムのタイムゾーンによって異なります。GMT(UST)では22:00:00ですが、異なるタイムゾーンでは何でもかまいません。したがって、タイムゾーンオフセットを時間に追加して、GMT日付を作成します。

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

なぜタイムスタンプが1000倍になるのですか?
Bruno Gomes、

2
@BrunoGomes彼はタイムスタンプが秒単位であると想定していますが、JavaScriptはミリ秒単位でそれらを行います。
ブレント

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.