JavaScriptで日付の差
-
21-09-2019 - |
質問
2つの日付の差を見つけるには?
解決
は日のオブジェクトとそのミリ秒の値を使用することにより、差異を計算することができます。
var a = new Date(); // Current date now.
var b = new Date(2010, 0, 1, 0, 0, 0, 0); // Start of 2010.
var d = (b-a); // Difference in milliseconds.
あなたは整数(これはミリ秒を表す小数部分を除去)に結果を変換し、その後秒に変換するために1000ミリ秒を分割し(整数/整数として)の秒数を得ることができ>
var seconds = parseInt((b-a)/1000);
あなたはその後、同じように長い時間単位、その後、60でminutes
を分割し、整数に変換することによりseconds
、その後、60でhours
を分割し、整数に変換することにより、全体minutes
を得ることができます。このことから、より低い単位の値に時間単位の最大全量を取得する機能と、残りの下部ユニットを作成することができる:
function get_whole_values(base_value, time_fractions) {
time_data = [base_value];
for (i = 0; i < time_fractions.length; i++) {
time_data.push(parseInt(time_data[i]/time_fractions[i]));
time_data[i] = time_data[i] % time_fractions[i];
}; return time_data;
};
// Input parameters below: base value of 72000 milliseconds, time fractions are
// 1000 (amount of milliseconds in a second) and 60 (amount of seconds in a minute).
console.log(get_whole_values(72000, [1000, 60]));
// -> [0,12,1] # 0 whole milliseconds, 12 whole seconds, 1 whole minute.
あなたは、第二 Dateオブジェクトの上方に設けられたものを入力パラメータを迷っている場合、下に自分の名前を参照されます:
new Date(<year>, <month>, <day>, <hours>, <minutes>, <seconds>, <milliseconds>);
としては、このソリューションのコメントで述べたように、あなたは、必ずしもあなたが表現したい日付のため、彼らがしている必要がない限り、すべてのこれらの値を提供する必要はありません。
他のヒント
私はこれを発見した、それは私のために罰金を動作します:
の二つの間の差を計算する既知の日付の
残念ながら、二つの既知の日付の間の日、週、または月などの期間の日付を計算するように簡単、あなただけの日は一緒にオブジェクトを追加することができないためではありません。計算の任意の並べ替えで、Dateオブジェクトを使用するために、我々は最初の大きな整数として格納されている日付の内部ミリ秒値を、取得する必要があります。それを行うための関数が)(Date.getTimeです。両方の日付が変換された後、以前のいずれかを返しから後1ミリ秒の差を差し引きます。所望の間隔は、次いでミリ秒の対応する数によってその数を割ることによって決定することができます。例えば、ミリ秒単位の一定数の日数を取得するために、我々は86,400,000で割るなり、日中のミリ秒数(1000×60秒60分24時間X X):
Date.daysBetween = function( date1, date2 ) {
//Get 1 day in milliseconds
var one_day=1000*60*60*24;
// Convert both dates to milliseconds
var date1_ms = date1.getTime();
var date2_ms = date2.getTime();
// Calculate the difference in milliseconds
var difference_ms = date2_ms - date1_ms;
// Convert back to days and return
return Math.round(difference_ms/one_day);
}
//Set the two dates
var y2k = new Date(2000, 0, 1);
var Jan1st2010 = new Date(y2k.getFullYear() + 10, y2k.getMonth(), y2k.getDate());
var today= new Date();
//displays 726
console.log( 'Days since '
+ Jan1st2010.toLocaleDateString() + ': '
+ Date.daysBetween(Jan1st2010, today));
丸めはあなたが部分的に日かしたいかに応じて、オプションです。
参考の
// This is for first date
first = new Date(2010, 03, 08, 15, 30, 10); // Get the first date epoch object
document.write((first.getTime())/1000); // get the actual epoch values
second = new Date(2012, 03, 08, 15, 30, 10); // Get the first date epoch object
document.write((second.getTime())/1000); // get the actual epoch values
diff= second - first ;
one_day_epoch = 24*60*60 ; // calculating one epoch
if ( diff/ one_day_epoch > 365 ) // check , is it exceei
{
alert( 'date is exceeding one year');
}
あなたが年、月、日の組み合わせとして表現の違いを探しているなら、私はこの機能をお勧めします:
function interval(date1, date2) {
if (date1 > date2) { // swap
var result = interval(date2, date1);
result.years = -result.years;
result.months = -result.months;
result.days = -result.days;
result.hours = -result.hours;
return result;
}
result = {
years: date2.getYear() - date1.getYear(),
months: date2.getMonth() - date1.getMonth(),
days: date2.getDate() - date1.getDate(),
hours: date2.getHours() - date1.getHours()
};
if (result.hours < 0) {
result.days--;
result.hours += 24;
}
if (result.days < 0) {
result.months--;
// days = days left in date1's month,
// plus days that have passed in date2's month
var copy1 = new Date(date1.getTime());
copy1.setDate(32);
result.days = 32-date1.getDate()-copy1.getDate()+date2.getDate();
}
if (result.months < 0) {
result.years--;
result.months+=12;
}
return result;
}
// Be aware that the month argument is zero-based (January = 0)
var date1 = new Date(2015, 4-1, 6);
var date2 = new Date(2015, 5-1, 9);
document.write(JSON.stringify(interval(date1, date2)));
私たちは自然にやるような方法で閏年(2月29日)と月の長さの違いを扱います。このソリューションは、(私は思います)。
したがって、たとえば、2015年2月28日と28間の間隔2015年3月ではなく28日、丁度1ヶ月とみなされます。当時の両方が2016年にされている場合は、違いがまだ正確に1ヶ月ではなく、29日になります。
まったく同じ月と日が、異なる年と日付は、常に年の正確な数の違いがあります。 2015年3月1日と2016年3月1日の間の差は、(理由は1年と365日カウントの)正確に1年ではなく、1年と1日になりますので。
この答えは、2つの日付の差についてです。
また、それが
に違いを分割含み、それのシンプルなので、それがどのように動作するかを見ることができます
時間の単位(Iが作った機能)と停止時間帯の問題をUTCに変換します。
function date_units_diff(a, b, unit_amounts) {
var split_to_whole_units = function (milliseconds, unit_amounts) {
// unit_amounts = list/array of amounts of milliseconds in a
// second, seconds in a minute, etc., for example "[1000, 60]".
time_data = [milliseconds];
for (i = 0; i < unit_amounts.length; i++) {
time_data.push(parseInt(time_data[i] / unit_amounts[i]));
time_data[i] = time_data[i] % unit_amounts[i];
}; return time_data.reverse();
}; if (unit_amounts == undefined) {
unit_amounts = [1000, 60, 60, 24];
};
var utc_a = new Date(a.toUTCString());
var utc_b = new Date(b.toUTCString());
var diff = (utc_b - utc_a);
return split_to_whole_units(diff, unit_amounts);
}
// Example of use:
var d = date_units_diff(new Date(2010, 0, 1, 0, 0, 0, 0), new Date()).slice(0,-2);
document.write("In difference: 0 days, 1 hours, 2 minutes.".replace(
/0|1|2/g, function (x) {return String( d[Number(x)] );} ));
どのように作品以上に私のコード
日付/時刻の差は、ミリ秒単位として、日を使用して計算することができます対象ます:
var a = new Date(); // Current date now.
var b = new Date(2010, 0, 1, 0, 0, 0, 0); // Start of 2010.
var utc_a = new Date(a.toUTCString());
var utc_b = new Date(b.toUTCString());
var diff = (utc_b - utc_a); // The difference as milliseconds.
その後
変換するために、1000年で割り、その違いに秒数を動作するように
秒ミリ秒、そして
を削除するには、整数(整数)に結果を変更
ミリ秒(10進の小数部):var seconds = parseInt(diff/1000)
。
また、私は例えば、同じプロセスを使用して時間の長い単位を取得することができます。
- (全体)分、秒 60によって整数に結果を変更分割、
- 時間、分割分 60によって整数に結果を変更する
私は分割の
に差がそのプロセスを行うための機能を作成しました
このデモでの時間の全体の単位、名前のsplit_to_whole_units
、ます:
console.log(split_to_whole_units(72000, [1000, 60]));
// -> [1,12,0] # 1 (whole) minute, 12 seconds, 0 milliseconds.
のこの答えは、この他の1 のはに基づいています。の
Date.prototype.addDays = function(days) {
var dat = new Date(this.valueOf())
dat.setDate(dat.getDate() + days);
return dat;
}
function getDates(startDate, stopDate) {
var dateArray = new Array();
var currentDate = startDate;
while (currentDate <= stopDate) {
dateArray.push(currentDate);
currentDate = currentDate.addDays(1);
}
return dateArray;
}
var dateArray = getDates(new Date(), (new Date().addDays(7)));
for (i = 0; i < dateArray.length; i ++ ) {
// alert (dateArray[i]);
date=('0'+dateArray[i].getDate()).slice(-2);
month=('0' +(dateArray[i].getMonth()+1)).slice(-2);
year=dateArray[i].getFullYear();
alert(date+"-"+month+"-"+year );
}
var DateDiff = function(type, start, end) {
let // or var
years = end.getFullYear() - start.getFullYear(),
monthsStart = start.getMonth(),
monthsEnd = end.getMonth()
;
var returns = -1;
switch(type){
case 'm': case 'mm': case 'month': case 'months':
returns = ( ( ( years * 12 ) - ( 12 - monthsEnd ) ) + ( 12 - monthsStart ) );
break;
case 'y': case 'yy': case 'year': case 'years':
returns = years;
break;
case 'd': case 'dd': case 'day': case 'days':
returns = ( ( end - start ) / ( 1000 * 60 * 60 * 24 ) );
break;
}
return returns;
}
使用方法
VAR qtMonths = DateDiff関数( 'MM'、新しいDate( '2015年5月5日')、新しいDate());
VAR qtYears = DateDiff関数( 'Y-Y'、新しいDate( '2015年5月5日')、新しいDate());
VAR qtDays = DateDiff関数( 'DD'、新しいDate( '2015年5月5日')、新しいDate());
または
VAR qtMonths = DateDiff関数( 'M'、新しい日付( '2015年5月5日')、新しいDate())。 //メートル|| Y || D
VAR qtMonths = DateDiff関数( '月'、新しいDate( '2015年5月5日')、新しいDate()); //月||今年||日
VAR qtMonths = DateDiff関数( 'ヶ月、新しいDate( '2015年5月5日')、新しいDate()); //ヶ月||年||日
...
var DateDiff = function (type, start, end) {
let // or var
years = end.getFullYear() - start.getFullYear(),
monthsStart = start.getMonth(),
monthsEnd = end.getMonth()
;
if(['m', 'mm', 'month', 'months'].includes(type)/*ES6*/)
return ( ( ( years * 12 ) - ( 12 - monthsEnd ) ) + ( 12 - monthsStart ) );
else if(['y', 'yy', 'year', 'years'].includes(type))
return years;
else if (['d', 'dd', 'day', 'days'].indexOf(type) !== -1/*EARLIER JAVASCRIPT VERSIONS*/)
return ( ( end - start ) / ( 1000 * 60 * 60 * 24 ) );
else
return -1;
}