最初に、デフォルトでは JavaScript が UTC で時刻を表示することに注意してください。
JavaScript の日付は基本的に、1970 年 1 月 1 日の午前 0 時 (UTC) から経過したミリ秒数として指定されます。この日付と時刻は、コンピューターに記録された日付と時刻の値の主要な基本値である UNIX エポックと同じです。(参照)
上記は、Date()
関数を使用して Date オブジェクトを作成する場合に当てはまります。
ES20xx を使用すると、以下のスニペットに示すように、テンプレート リテラル(IE ではサポートされていません) とpadStart (IE ではサポートされていません) 文字列拡張子を使用して、Date オブジェクトを好みに合わせてフォーマットできます。
date.toLocaleString()
また、ブラウザが関数を実行している地域で一般的に使用されている形式で文字列を提供するものもあります
toLocaleString() メソッドは、この日付の言語に依存した表現を含む文字列を返します。新しい locales および options 引数により、アプリケーションは書式設定規則を使用する言語を指定し、関数の動作をカスタマイズできます。ロケールとオプションの引数を無視する古い実装では、使用されるロケールと返される文字列の形式は完全に実装に依存します。(参照)
したがって、これを行う簡単な方法は、Date オブジェクトから取得した Unix タイムスタンプに 15 分を追加し、フォーマットすることtoLocaleString
です (これが最初のスニペットです)。
整数と同様に、以下の 2 つの日付オブジェクトを比較することもできます。
var dt1 = (new Date()).getTime();//Unix timestamp (in milliseconds)
console.log("Current date Unix timestamp(ms)")
console.log(dt1)
console.log("15 mins later date Unix timestamp(ms)")
console.log(dt1+900000)//15min=900000ms (15*60*1000)
var dt = new Date(dt1);
var dt2= new Date(dt1+900000)
console.log("Unformatted dates 15 min apart (ISO 8601 / UTC)")
console.log(dt)
console.log(dt2)
console.log("Formatted dates 15 min apart (According to your timezone)")
console.log(dt.toLocaleString())
console.log(dt2.toLocaleString())
以下は、表示中に日付オブジェクトをフォーマットすることを含む長いスニペットです。これは上記の方法ほど最適ではないと思います。しかし、それでも仕事をします。
var dt = new Date();
console.log(dt);
const localdte = dt.toLocaleString();
console.log(localdte);
const [dated, time, ampm] = localdte.split(' ');
const [hh, mm, ss] = time.split(':');
var date = `${
dt.getDate().toString().padStart(2, '0')}/${
(dt.getMonth()+1).toString().padStart(2, '0')}/${
dt.getFullYear().toString().padStart(4, '0')} ${
dt.getHours().toString().padStart(2, '0')}:${
dt.getMinutes().toString().padStart(2, '0')}`
console.log("Date right now");
console.log(date);
console.log("date 15 mins later");
var date15 = `${
dt.getDate().toString().padStart(2, '0')}/${
(dt.getMonth()+1).toString().padStart(2, '0')}/${
dt.getFullYear().toString().padStart(4, '0')} ${
(dt.getMinutes()>44?(dt.hours==23?00:dt.getHours()+1):dt.getHours()).toString().padStart(2, '0')}:${
((dt.getMinutes()+15)%60).toString().padStart(2, '0')}`
console.log("24 hour format " + date15);
if (ampm == "PM" && hh != 12 && hh!=00) {
var date15 = `${
dt.getDate().toString().padStart(2, '0')}/${
(dt.getMonth()+1).toString().padStart(2, '0')}/${
dt.getFullYear().toString().padStart(4, '0')} ${
(dt.getMinutes()>44?(dt.getHours()+1)%12:dt.getHours()%12).toString().padStart(2, '0')}:${
((dt.getMinutes()+15)%60).toString().padStart(2, '0')}`
console.log("12 hour format " + date15 + ampm); //12 hour format
} else if (hh == 00) {
var date15 = `${
dt.getDate().toString().padStart(2, '0')}/${
(dt.getMonth()+1).toString().padStart(2, '0')}/${
dt.getFullYear().toString().padStart(4, '0')} ${
(dt.getMinutes()>44?1:12).toString().padStart(2, '0')}:${
((dt.getMinutes()+15)%60).toString().padStart(2, '0')}`
console.log("12 hour format " + date15 + ampm);
} else {
console.log("12 hour format " + date15 + ampm); //12 hour format
}
const dateISO = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate(), dt.getHours(), ((dt.getMinutes() + 15) % 60), dt.getMilliseconds());
console.log("ISO 8601 format (UTC)");
console.log(dateISO);
注: Chrome コンソールとスニペット コンソールの出力には違いがあります。Chrome コンソールの出力では、日付オブジェクトは常に現地時間に合わせてフォーマットされます。スニペット コンソールでは、日付オブジェクトの出力は UTC およびISO8601に準拠しています。
以前の回答でエラーを指摘してくれた @RobG に感謝します。