JavaScriptを使用して特定の日付のエポックを取得する


回答:


182

Dateオブジェクトを作成して呼び出すことができますgetTime

new Date(2010, 6, 26).getTime() / 1000

12
日付コンストラクタの月の引数は少し一貫性がなく、実際にはゼロベースです。つまり、7は8月なので、1を引く必要があります:-)
Andy E

6
@Andy-残りを維持しながら月を-1だけオフセットすることは奇抜なアイデアであり、JavaScriptがそこで使用されるとしたら、スペースシャトルがうまくいかなくなるようなものです:)
Anurag

6
たぶん、より良い:new Date( "2010-7-26")。getTime()/ 1000なので、オフセットについて考える必要はありません。
Vincent McNabb、2010

5
@Vincent:new Date("2010-7-26")Internet Explorerでは解析されません。 日付コンストラクタは、文字列が渡されるとDate.parse()メソッドに依存します。これは、ECMA-262 3rdエディションでは実装に依存し、その結果、IEで非常に柔軟性がありません。
Andy E

時間帯を指定することで起こり得るエラーや誤解を最小限に抑えることもできます。少なくとも実際の(Linux-)バージョンのFirefox、OperaおよびChromeは、新しい日付( "Jan 1、1970 GMT + 00:00、00:01");のようなJavaScript日付をインスタンス化することをサポートしています。これにより、正しい月の形式に関する混乱も軽減されます。
Michael Besteck




0
Number(new Date(2010, 6, 26))

上記と同じように機能します。秒が必要な場合は忘れないでください/ 1000


0

一部の回答では、JavaScript Dateオブジェクトのタイムゾーンの変動による副作用について説明していません。したがって、これが懸念される場合は、この回答を検討する必要があります。

方法1:マシンのタイムゾーンに依存

デフォルトでは、JavaScriptはマシンのタイムゾーンを考慮して日付を返すため、getTime()結果はコンピューターによって異なります。実行中のこの動作を確認できます:

new Date(1970, 0, 1, 0, 0, 0, 0).getTime()
    // Since 1970-01-01 is Epoch, you may expect ZERO
    // but in fact the result varies based on computer's timezone

エポック以降のタイムゾーンを考慮したい場合は、問題ありません。そのため、エポック以降の現在の日付、またはコンピュータのタイムゾーンに基づいて指定された日付の時間を取得する場合は、このメソッドを引き続き使用できます。

// Seconds since Epoch (Unix timestamp format)

new Date().getTime() / 1000             // local Date/Time since Epoch in seconds
new Date(2020, 11, 1).getTime() / 1000  // time since Epoch to 2020-12-01 00:00 (local timezone) in seconds

// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)

new Date().getTime()                    // local Date/Time since Epoch in milliseconds
new Date(2020,  0, 2).getTime()         // time since Epoch to 2020-01-02 00:00 (local timezone) in milliseconds

// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)

方法2:マシンのタイムゾーンに依存しない

ただし、タイムゾーンの変化に乗って、UTCの指定された日付(つまり、タイムゾーンに依存しない)のエポック以降の時間を取得する場合は、Date.UTCメソッドを使用するか、日付をタイムゾーンからUTCにシフトする必要があります。

Date.UTC(1970,  0, 1)
    // should be ZERO in any computer, since it is ZERO the difference from Epoch

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()  // difference in milliseconds between your timezone and UTC
    (new Date(1970,  0, 1).getTime() - timezone_diff)
    // should be ZERO in any computer, since it is ZERO the difference from Epoch

したがって、この方法を使用すると(または、差を差し引くと)、結果は次のようになります。

// Seconds since Epoch (Unix timestamp format)

Date.UTC(2020,  0, 1) / 1000  // time since Epoch to 2020-01-01 00:00 UTC in seconds

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()
    (new Date(2020,  0, 1).getTime() - timezone_diff) / 1000  // time since Epoch to 2020-01-01 00:00 UTC in seconds
    (new Date(2020, 11, 1).getTime() - timezone_diff) / 1000  // time since Epoch to 2020-12-01 00:00 UTC in seconds

// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)

Date.UTC(2020,  0, 2)   // time since Epoch to 2020-01-02 00:00 UTC in milliseconds

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()
    (new Date(2020,  0, 2).getTime() - timezone_diff)         // time since Epoch to 2020-01-02 00:00 UTC in milliseconds

// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)

IMO、何をしているのかが分からない場合(上記の注を参照)、マシンに依存しないため、方法2を選択する必要があります。


エンドノート

この回答の推奨事項は、Date.UTC日付と時刻を指定しないと機能しないため、別の方法を使用して次のようなことをする傾向があります。

const timezone_diff = new Date(1970, 0, 1).getTime()
(new Date().getTime() - timezone_diff)  // <-- !!! new Date() without arguments
    // means "local Date/Time subtracted by timezone since Epoch" (?)

これは意味がなく、おそらく間違っています(日付を変更しています)。これを行わないことに注意してください。現在の日付時刻からエポック以降の時間を取得したい場合は、おそらく方法1を使用して問題ありません。


0

Date.parse()メソッドは日付の文字列表現を解析し、からのミリ秒数を返しますJanuary 1, 1970, 00:00:00 UTC

const unixTimeZero = Date.parse('01 Jan 1970 00:00:00 GMT');
const javaScriptRelease = Date.parse('04 Dec 1995 00:12:00 GMT');

console.log(unixTimeZero);
// expected output: 0

console.log(javaScriptRelease);
// expected output: 818035920000

詳しくは、Date.parse()をご覧ください。

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