如何找到兩個日期之間的差異?JavaScript中的日期差異
回答
通過使用Date對象及其毫秒值,差異可以計算:
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);
然後,您可以通過將seconds
60,並獲得全minutes
將其轉換爲整數,然後hours
將minutes
除以60並將其轉換爲整數,然後以相同方式將其轉換爲更長的時間單位。由此看來,一個函數來獲取較低單元的值的時間單元的最大全量,剩下的更低的單位可創建:
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 object是,見下他們的名字:
new Date(<year>, <month>, <day>, <hours>, <minutes>, <seconds>, <milliseconds>);
在本解決方案的評論中指出,你不一定需要,除非他們是必要的,你要表示日期提供所有這些值。
// 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');
}
我發現這和正常工作對我來說:
計算兩個已知的日期之間的差異
不幸的是,計算日期間隔,例如兩個已知日期之間的日期,星期或月份並不容易,因爲您不能只將Date對象添加在一起。爲了在任何計算中使用Date對象,我們必須先檢索Date的內部毫秒值,該值存儲爲一個大整數。要做到這一點的函數是Date.getTime()。一旦兩個日期都進行了轉換,從較早的一箇中減去後面的一個將以毫秒爲單位返回差值。然後可以通過將該數字除以相應的毫秒數來確定期望的間隔。例如,爲了獲得用於毫秒的給定數目的天數,我們將通過86400000,毫秒的在一天的數目(1000×60秒×60分鐘×24小時)劃分:
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));
的舍入是可選的,取決於你是否想要部分日子。
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);
}
如果你正在尋找一個差異表示爲年,月,日的組合,我建議這個功能:
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日至2015年3月28日的時間間隔將被視爲恰好一個月,而不是28天。如果這兩天都在2016年,那麼差異仍然是一個月,而不是29天。
具有完全相同的月份和日期但不同年份的日期總是會有確切的年數差異。因此,2015-03-01和2016-03-01之間的差異將爲1年,而不是1年和1天(因爲365天爲1年)。
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;
}
用法
變種qtMonths = DateDiff的( '毫米',新的日期( '2015-05-05'),新的日期());
var qtYears = DateDiff('yy',new Date('2015-05-05'),new Date());
var qtDays = DateDiff('dd',new Date('2015-05-05'),new Date());
OR
變種qtMonths = DateDiff的( 'M',新的日期( '2015-05-05'),新的日期()); // m || y || d
var qtMonths = DateDiff('month',new Date('2015-05-05'),new Date()); //月||年||日期
var qtMonths = DateDiff('months',new Date('2015-05-05'),new 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;
}
- 1. 日期差異Javascript
- 2. Javascript日期差異
- 3. JavaScript的日期差異
- 4. JavaScript日期差異天
- 5. javascript中的月份日期差異
- 6. 在javascript中獲取日期差異
- 7. 在javascript中獲取日期差異
- 8. 日期差異
- 9. 日期差異
- 10. 日期差異
- 11. 如何匹配JavaScript中給定日期差異的日期
- 12. SQL中的日期差異
- 13. IOS中的日期差異
- 14. PHP中的日期差異?
- 15. HSQLDB中的日期差異
- 16. mysql中的日期差異
- 17. Java中的日期差異
- 18. Android中的日期差異
- 19. PHP中的日期差異
- 20. mysql中的日期差異
- 21. EF4中的日期差異
- 22. MySQL中的日期差異
- 23. Javascript - 兩個日期之間的差異
- 24. 兩個日期()之間的JavaScript差異
- 25. php日期差異?
- 26. PHP日期差異
- 27. 按日期差異
- 28. SQL日期差異
- 29. PHP日期差異
- 30. Sqlite日期差異
[比較兩個使用JavaScript日期(的可能的複製https://stackoverflow.com/questions/492994/compare-two-dates-with-javascript ) – 2017-08-02 14:01:12