他のDateオブジェクトよりも30分遅いDateオブジェクトを取得したいのですが。 JavaScriptを使ってそれを行うにはどうすればよいですか。
あなたが多くの日付の仕事をしているなら、あなたは Datejs または Moment.js のようなJavaScript日付ライブラリを調べたいと思うかもしれません。たとえば、Moment.jsでは、これは単に次のようになります。
var newDateObj = moment(oldDateObj).add(30, 'm').toDate();
これは 混沌の答え のようなものですが、一行では:
var newDateObj = new Date(oldDateObj.getTime() + diff*60000);
ここで、diff
は、oldDateObj
の時刻からの分単位の差です。それは否定的なことさえありえます。
あるいは、再利用可能な機能として、これを複数の場所で行う必要がある場合は、
function addMinutes(date, minutes) {
return new Date(date.getTime() + minutes*60000);
}
明日の日付を取得するために、日付に24時間を追加できると思うかもしれませんね。 違う!
addMinutes(myDate, 60*24); //DO NOT DO THIS
ユーザーが夏時間を観察する場合、1日は必ずしも24時間の長さではありません。一年に一日23時間しかない、一年に一日25時間です。たとえば、ほとんどの米国およびカナダでは、2014年11月2日午前0時24時間後はまだ11月2日です。
addMinutes(new Date('2014-11-02'), 60*24); //In USA, prints 11pm on Nov 2, not 12am Nov 3!
こういうわけで 前述のライブラリの1つを使うことがより安全な方法です あなたがこれでたくさんの仕事をしなければならないならば。
以下は私が書いたこの関数のより一般的なバージョンです。私はまだライブラリを使用することをお勧めしますが、それはあなたのプロジェクトにとってやり過ぎる/不可能な場合があります。構文は MySQL DATE_ADD functionの後にモデル化されています。
/**
* Adds time to a date. Modelled after MySQL DATE_ADD function.
* Example: dateAdd(new Date(), 'minute', 30) //returns 30 minutes from now.
* https://stackoverflow.com/a/1214753/18511
*
* @param date Date to start with
* @param interval One of: year, quarter, month, week, day, hour, minute, second
* @param units Number of units of the given interval to add.
*/
function dateAdd(date, interval, units) {
var ret = new Date(date); //don't change original date
var checkRollover = function() { if(ret.getDate() != date.getDate()) ret.setDate(0);};
switch(interval.toLowerCase()) {
case 'year' : ret.setFullYear(ret.getFullYear() + units); checkRollover(); break;
case 'quarter': ret.setMonth(ret.getMonth() + 3*units); checkRollover(); break;
case 'month' : ret.setMonth(ret.getMonth() + units); checkRollover(); break;
case 'week' : ret.setDate(ret.getDate() + 7*units); break;
case 'day' : ret.setDate(ret.getDate() + units); break;
case 'hour' : ret.setTime(ret.getTime() + units*3600000); break;
case 'minute' : ret.setTime(ret.getTime() + units*60000); break;
case 'second' : ret.setTime(ret.getTime() + units*1000); break;
default : ret = undefined; break;
}
return ret;
}
var d1 = new Date (),
d2 = new Date ( d1 );
d2.setMinutes ( d1.getMinutes() + 30 );
alert ( d2 );
var newDateObj = new Date();
newDateObj.setTime(oldDateObj.getTime() + (30 * 60 * 1000));
var now = new Date();
now.setMinutes(now.getMinutes() + 30); // timestamp
now = new Date(now); // Date object
たぶんこんな感じ?
var d = new Date();
var v = new Date();
v.setMinutes(d.getMinutes()+30);
私はいつも7つの関数を作成しています:JSの日付を扱う:addSeconds、addMinutes、addHours、addDays、addWeeks、addMonths、addYears。
あなたはここで例を見ることができます: http://jsfiddle.net/tiagoajacobi/YHA8x/
使い方:
var now = new Date();
console.log(now.addMinutes(30));
console.log(now.addWeeks(3));
これが機能です。
Date.prototype.addSeconds = function(seconds) {
this.setSeconds(this.getSeconds() + seconds);
return this;
};
Date.prototype.addMinutes = function(minutes) {
this.setMinutes(this.getMinutes() + minutes);
return this;
};
Date.prototype.addHours = function(hours) {
this.setHours(this.getHours() + hours);
return this;
};
Date.prototype.addDays = function(days) {
this.setDate(this.getDate() + days);
return this;
};
Date.prototype.addWeeks = function(weeks) {
this.addDays(weeks*7);
return this;
};
Date.prototype.addMonths = function (months) {
var dt = this.getDate();
this.setMonth(this.getMonth() + months);
var currDt = this.getDate();
if (dt !== currDt) {
this.addDays(-currDt);
}
return this;
};
Date.prototype.addYears = function(years) {
var dt = this.getDate();
this.setFullYear(this.getFullYear() + years);
var currDt = this.getDate();
if (dt !== currDt) {
this.addDays(-currDt);
}
return this;
};
解決する最も簡単な方法は、JavaScriptでは日付が単なる数字であることを認識することです。 0
または'Wed Dec 31 1969 18:00:00 GMT-0600 (CST)
を起動します。すべての1
はミリ秒を表します。値を取得し、その値を使用して新しい日付をインスタンス化することで、ミリ秒を加算または減算できます。そのことを考えれば、かなり簡単に管理できます。
const minutesToAdjust = 10;
const millisecondsPerMinute = 60000;
const originalDate = new Date('11/20/2017 10:00 AM');
const modifiedDate1 = new Date(originalDate.valueOf() - (minutesToAdjust * millisecondsPerMinute));
const modifiedDate2 = new Date(originalDate.valueOf() + (minutesToAdjust * millisecondsPerMinute));
console.log(originalDate); // Mon Nov 20 2017 10:00:00 GMT-0600 (CST)
console.log(modifiedDate1); // Mon Nov 20 2017 09:50:00 GMT-0600 (CST)
console.log(modifiedDate2); // Mon Nov 20 2017 10:10:00 GMT-0600 (CST)
これは私がしていることで、かなりうまくいきます。
Date.prototype.addMinutes = function(minutes) {
var copiedDate = new Date(this.getTime());
return new Date(copiedDate.getTime() + minutes * 60000);
}
それならあなたはこれをこのように呼ぶことができます:
var now = new Date();
console.log(now.addMinutes(50));
ここでの答えの多くは、タイムトラベル計算に非常に必要とされる創造的な要素を欠いていると感じます。私は30分の時間翻訳のために私の解決策を提示します。
(jsfiddle ここ )
function fluxCapacitor(n) {
var delta,sigma=0,beta="ge";
(function(K,z){
(function(a,b,c){
beta=beta+"tT";
switch(b.shift()) {
case'3':return z('0',a,c,b.shift(),1);
case'0':return z('3',a,c,b.pop());
case'5':return z('2',a,c,b[0],1);
case'1':return z('4',a,c,b.shift());
case'2':return z('5',a,c,b.pop());
case'4':return z('1',a,c,b.pop(),1);
}
})(K.pop(),K.pop().split(''),K.pop());
})(n.toString().split(':'),function(b,a,c,b1,gamma){
delta=[c,b+b1,a];sigma+=gamma?3600000:0;
beta=beta+"im";
});
beta=beta+"e";
return new Date (sigma+(new Date( delta.join(':')))[beta]());
}
これが ES6 のバージョンです。
let getTimeAfter30Mins = () => {
let timeAfter30Mins = new Date();
timeAfter30Mins = new Date(timeAfter30Mins.setMinutes(timeAfter30Mins.getMinutes() + 30));
};
ようにそれを呼ぶ:
getTimeAfter30Mins();
時間計算に対処することに関わる癖を処理することが知られている既存のライブラリを使用してください。私の現在のお気に入りは moment.js です。
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.js"></script>
<script>
var now = moment(); // get "now"
console.log(now.toDate()); // show original date
var thirty = moment(now).add(30,"minutes"); // clone "now" object and add 30 minutes, taking into account weirdness like crossing DST boundries or leap-days, -minutes, -seconds.
console.log(thirty.toDate()); // show new date
</script>
私が書いた別の選択肢
これがあなたが必要とするすべての日付処理であるならばやり過ぎですが、それはあなたが望むことをするでしょう。
日付/時刻のフォーマット、日付の計算(日付部分の追加/減算)、日付の比較、日付の解析などをサポートしています。
私のように怠惰な人のために:
"enum"を使用し、同じオブジェクトを操作して、コーヒースクリプトでKipの答え(上から)
Date.UNIT =
YEAR: 0
QUARTER: 1
MONTH: 2
WEEK: 3
DAY: 4
HOUR: 5
MINUTE: 6
SECOND: 7
Date::add = (unit, quantity) ->
switch unit
when Date.UNIT.YEAR then @setFullYear(@getFullYear() + quantity)
when Date.UNIT.QUARTER then @setMonth(@getMonth() + (3 * quantity))
when Date.UNIT.MONTH then @setMonth(@getMonth() + quantity)
when Date.UNIT.WEEK then @setDate(@getDate() + (7 * quantity))
when Date.UNIT.DAY then @setDate(@getDate() + quantity)
when Date.UNIT.HOUR then @setTime(@getTime() + (3600000 * quantity))
when Date.UNIT.MINUTE then @setTime(@getTime() + (60000 * quantity))
when Date.UNIT.SECOND then @setTime(@getTime() + (1000 * quantity))
else throw new Error "Unrecognized unit provided"
@ # for chaining