Jak znaleźć różnicę między dwiema datami?Różnica między datami w JavaScript
Odpowiedz
Stosując wartość Date obiektu i jego milisekund, różnice można obliczyć:
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.
można uzyskać liczbę sekund (jako liczba całkowita/liczby całkowitej) poprzez podzielenie milisekundy przez 1000, aby go przekonwertować do kilku sekund, a następnie przekształca się wynik typu (to usunięcie części ułamkowej reprezentujący milisekundy):
var seconds = parseInt((b-a)/1000);
następnie można uzyskać całe minutes
dzieląc przez 60 i seconds
przekształcając go w liczbę całkowitą, a następnie hours
dzieląc przez 60. minutes
i przekształcając ją w liczbę całkowitą, a następnie w jednostki czasu w ten sam sposób. Z tego, funkcja, aby uzyskać maksymalną całą kwotę jednostce czasu w wartości niższej jednostki, a pozostała część dolna jednostka mogą być tworzone:
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.
Jeśli zastanawiasz się, jakie parametry wejściowe podane powyżej dla drugi Date object są, zobaczyć ich nazwy poniżej:
new Date(<year>, <month>, <day>, <hours>, <minutes>, <seconds>, <milliseconds>);
Jak zauważył w komentarzach tego rozwiązania, nie koniecznie muszą dostarczyć wszystkie te wartości, chyba że są one niezbędne do terminu, który chcesz reprezentować.
Nie musisz wywoływać konstruktora 'Date' ze wszystkimi argumentami, możesz wywoływać tylko rok i miesiąc, pozostałe argumenty są opcjonalne. – CMS
Dzięki, CMS. Chciałem mieć pewność, że użytkownik zrozumiał, że mogą uzyskać bardzo szczegółowe informacje o swojej specyfikacji. – Sampson
Zaktualizowałem rozwiązanie, aby przekazać Twój punkt, CMS. Doceniam heads-up. – Sampson
Użyj DateJs.
Narzędzie szwajcarskiego noża do programowania w czasie javascript!
// 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');
}
Znalazłem to i to działa dobrze dla mnie:
obliczenie różnicy pomiędzy dwoma znanymi Daty
Niestety obliczania przedział dat, takich jak dni, tygodnie lub miesiące między dwiema znanymi datami nie są tak proste, ponieważ nie można po prostu dodawać razem obiektów Date. Aby użyć obiektu Date w dowolnym rodzaju obliczeń, musimy najpierw pobrać wewnętrzną wartość milisekundy Date, która jest przechowywana jako duża liczba całkowita. Funkcją do tego celu jest Date.getTime(). Po przekonwertowaniu obu dat odjęcie późniejszej z poprzedniej zwraca różnicę w milisekundach. Żądany interwał można następnie określić, dzieląc tę liczbę przez odpowiednią liczbę milisekund. Na przykład, aby uzyskać liczbę dni dla danej liczby milisekund, by podzielić przez 86,400,000, liczba milisekund dziennie (1000 x 60 sekund x 60 min x 24 godzin):
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));
zaokrąglanie jest opcjonalne, w zależności od tego, czy chcesz częściowe dni czy nie.
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);
}
Jeśli szukasz różnicy wyrażony jako kombinacja lat, miesięcy i dni, chciałbym zaproponować tę funkcję:
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)));
To rozwiązanie potraktuje lata przestępne (29 lutego) i różnice długości miesięcy w sposób, który oczywiście byśmy zrobili (jak sądzę).
Na przykład interwał między 28 lutego 2015 r. A 28 marca 2015 r. Potrwa dokładnie jeden miesiąc, a nie 28 dni. Jeśli oba te dni są w 2016 roku, różnica będzie nadal wynosić dokładnie jeden miesiąc, a nie 29 dni.
Daty z dokładnie tym samym miesiącem i dniem, ale w innym roku, zawsze będą miały różnicę w dokładnej liczbie lat. Różnica między 2015-03-01 a 2016-03-01 będzie więc wynosić dokładnie 1 rok, a nie 1 rok i 1 dzień (z powodu 365 dni liczonych jako 1 rok).
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;
}
wykorzystania
var qtMonths = DATEDIFF ('mm' nową datę ('05.05.2015'), nowy Data());
var qtYears = DateDiff ("yy", nowa data ("2015-05-05"), nowa data());
var qtDays = DateDiff ("dd", nowa data ("2015-05-05"), nowa data());
lub
var qtMonths = DATEDIFF ('m', nową datę ('05.5.2015'), nowy Data()); // m || y || d
var qtMonths = DateDiff ("miesiąc", nowa data ("2015-05-05"), nowa data()); // miesiąc || rok || dzień
var qtMonths = DateDiff ("miesiące", nowa data ("2015-05-05"), nowa data()); // miesiące || lata || dzień
...
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. Różnica w miesiącach między datami w MySQL
- 2. PHP Różnica w miesiącach między dwiema datami?
- 3. Integer różnica w python między dwiema datami
- 4. Różnica inicjalizacji dwiema datami w JavaScript
- 5. Różnica między dwoma datami z różnymi latami
- 6. Różnica między dwoma datami w dokładnej liczbie godzin w SQL
- 7. Różnica w systemie Android między dwoma datami w sekundach
- 8. różnica w sekundach między dwiema datami za pomocą czasu joda?
- 9. Różnica pomiędzy datami w R
- 10. Jak znaleźć różnicę między datami w VBA
- 11. obliczenie różnicy między dwiema datami
- 12. SQL Wybierz między datami
- 13. Warunkowy wybór między datami
- 14. JavaScript dziwne manipulowanie datami
- 15. Średnia różnica między dwiema datami pogrupowana według trzeciego pola?
- 16. Jak znaleźć liczbę dni między dwiema datami
- 17. Różnica między tym i ja w JavaScript
- 18. Różnica (jeśli istnieje) między `a 'w javascript
- 19. Jak znaleźć różnicę między dwoma datami przy użyciu Javascript
- 20. Różnice między datami w wierszach w R
- 21. Miesiące między dwiema datami funkcja
- 22. Dni między dwiema datami w języku Python
- 23. genarate daty między dwiema datami w Androidzie
- 24. SQL między datami włącznie z datami rozpoczęcia i zakończenia
- 25. javascript: różnica między scrollTop i offsetTop
- 26. Java, obliczyć liczbę dni między dwiema datami
- 27. Zdobywaj zdarzenia kalendarza między dwiema datami
- 28. Mysql: Wybierz wszystkie dane między dwiema datami
- 29. dlaczego odejmowanie między datami zwraca typ Rational?
- 30. Yii findAllByAttributes z MIĘDZY datami i ZAMÓWIENIE
Możliwy duplikat [por dwiema datami z JavaScript] (https://stackoverflow.com/questions/492994/compare-two-dates-with-javascript) –