日付に10秒を追加


253

JavaScriptの日付オブジェクトに10秒を追加するにはどうすればよいですか?

このようなもの:

var timeObject = new Date()     
var seconds = timeObject.getSeconds() + 10;
timeObject = timeObject + seconds;

4
または、コンストラクターで実行する場合-new Date(new Date()。getTime()+ 10000)
John Strickler

回答:


416

ありますsetSecondsだけでなく、方法は:

var t = new Date();
t.setSeconds(t.getSeconds() + 10);

他の Date関数のリストについては、MDNを確認してください。


setSeconds ラップアラウンドのケースを正しく処理します:

var d;
d = new Date('2014-01-01 10:11:55');
alert(d.getMinutes() + ':' + d.getSeconds()); //11:55
d.setSeconds(d.getSeconds() + 10);
alert(d.getMinutes() + ':0' + d.getSeconds()); //12:05


3
Nodejsをインストールすると、d.getSeconds()が文字列として返されます。これを(+ d.getSeconds())に変更する必要がありました。単項プラスは文字列を数値に変換します。おそらくもう少しわかりやすいのは1 * d.getSeconds()です
tqwhite

1
@tqwhite、ノードにtypeof new Date().getSeconds()戻る'number'ので、(古いバージョンのノードなどを使用している場合を除いて)他の問題が発生する可能性があります。
zzzzBov 2016年

2
やってみるd.setSeconds(d.getSeconds() - 92);と、1'32 "ではなく2'32"の差になってしまいます。new Date(d.getTime() - 92*1000);しかし、解決策は機能します!
Rafalon

1
文書化されていない動作(setSeconds(70)は分を1ずつインクリメントし、秒を10に設定する)に依存することは、一般的に悪い習慣のようです。Date.getTime()+ <追加するミリ秒数>を指す(現在次の)回答は、意図され、サポートされているアプローチのようであり、それぞれの文書化されていないニュアンスの百科事典的な知識がなくても、さまざまな言語から来ているほとんどのプログラマーには明らかです特定のJavaScriptエンジン。
Tom Dibbleが2017年

1
過去のタイムゾーンで問題が発生する可能性があります。@ Ronの回答の下にあるコメントを参照してください:stackoverflow.com/a/17267937/198797。おそらく一般的なシナリオではなく、それでも問題です。
tsemer

110
// let timeObject = new Date();
// let seconds = 10 * 1000; // 10000 milliseconds
timeObject = new Date(timeObject.getTime() + seconds);

33
...そして10000を追加した理由は、JavaScriptの日付がミリ秒単位で機能するためです。つまり、10000 = 10 * 1000
psiphi75

1
また、timeObjectを数値にキャストするため、+ before timeObjectが必要です。つまり、ロンの答えのtimeObject.getTime()のようなものです
James

1
JavaScriptはとても厄介です。これらの初期のAPIは少し混乱しています。
usr

62

私たちの間のパフォーマンスマニアのためだけに。

時間をもらう

var d = new Date('2014-01-01 10:11:55');
d = new Date(d.getTime() + 10000);

5,196,949オペレーション/秒、最速


setSeconds

var d = new Date('2014-01-01 10:11:55');
d.setSeconds(d.getSeconds() + 10);

2,936,604オペレーション/秒、43%遅い


moment.js

var d = new moment('2014-01-01 10:11:55');
d = d.add(10, 'seconds');

22,549オペレーション/秒、100%遅い


だから、おそらくそれは人間が読めるものではありませんが(それほど悪くはありませんが)、最速の方法です:)

jsprefオンラインテスト


3
詳細をありがとう、非常に便利:)
Dean

58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

また 、JavaScriptのDateオブジェクトに30分を追加する方法を参照してください


7
ここですべての間違った答えのうち、これが正しいものです。
Cory Mawhorter 2014

はい、これが正解です。残念ながら、「javascript date add seconds」を検索し、最も投票された回答が間違っている場合、Googleはこの質問を参照しています。
PhilippGächter2014年

2
選択した回答(現在は@zzzzBovから)が間違っていることを誰かが説明できますか?わたしにはできる。
2016

1
@tsemer、一見すると、zzzzBovの答えは正しくないと思いました。範囲外の場合、分の値が更新されるとは思わなかったためです。しかし、「やりがい」があるため、MDNを確認し、答えが間違いなく正しいことを確認しました。:)
Ron

1
@tsemer(例えば、Internet Explorerの11)過去のタイムゾーンをサポートしたWebブラウザで試してみてください。また、「アジア/エカテリンブルク」にお使いのシステムのタイムゾーンを設定しますvar timestamp = Date.parse("2011-03-26T20:59:59.999Z"); var d = new Date(timestamp); d.setSeconds(d.getSeconds() + 10); console.log(d.getTime() - timestamp);
4esn0k

9

これを試して

a = new Date();
a.setSeconds(a.getSeconds() + 10);


4

新しい亜種がいくつかあります

  1. var t = new Date(Date.now() + 10000);
  2. var t = new Date(+new Date() + 10000);

2

Date()JavaScript のオブジェクトはそれほどスマートではありません。

秒の追加だけに焦点を当てると、スムーズに処理されるように見えますが、秒数Xを追加しようとすると、同じDateオブジェクトに分数と時間数Xなどを追加すると、問題が発生します。したがって、私は単にsetSeconds()メソッドをてデータを秒に変換する(これはうまくいきました)。

Date()すべてのsetメソッドを使用してグローバルオブジェクトに時間を追加することを誰かが示すことができ、最終時間が正しく出てくる場合、それを確認したいのですが、特定のDate()オブジェクトで一度に1つのsetメソッドを使用するという感覚が得られます。それらを混ぜると混乱につながります。

var vTime = new Date();

var iSecondsToAdd = ( iSeconds + (iMinutes * 60) + (iHours * 3600) + (iDays * 86400) );

vTime.setSeconds(iSecondsToAdd);

役立つドキュメントがいくつかあります


2
  1. setSeconds今日から数秒を取得し、それに10秒を追加するだけでメソッドを使用できます

    var today = new Date();
    today.setSeconds(today.getSeconds() + 10);
  2. 新しい日付に10 * 1000ミリ秒を追加できます。

    var today = new Date(); 
    today = new Date(today.getTime() + 1000*10);
  3. 使用できますsetTime

    today.setTime(now.getTime() + 10000)

1

この方法を試してください。

Date.prototype.addSeconds = function(seconds) {
  var copiedDate = new Date(this.getTime());
  return new Date(copiedDate.getTime() + seconds * 1000);
}

ただ電話して割り当てる new Date().addSeconds(10)

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