07/26/2010
Javascriptを使用してUNIXタイムスタンプに変換するにはどうすればよいですか?
7 に答える
new Date("2016-3-17").valueOf()
長いエポックを返します
一部の回答では、JavaScriptDateオブジェクトのタイムゾーンの変動による副作用について説明されていません。したがって、これが懸念事項である場合は、この回答を検討する必要があります。
方法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を使用して問題ありません。
http://www.w3schools.com/jsref/jsref_obj_date.aspをご覧ください
UTC()
UNIXエポックからのミリ秒を返す関数があります。
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()をご覧ください。
Date.now()関数を使用することもできます。
Number(new Date(2010, 6, 26))
上記と同じように機能します。あなたが秒を必要とするならば、することを忘れないでください/ 1000