어떻게 다운로드합니까 일 수를 두 날짜 사이에 JavaScript 에서? 예를 들어, 주어진 두 날짜 입력 상자:
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>
<script>
alert(datediff("day", first, second)); // what goes here?
</script>
이것은 구현 '을' 빠르고 더러운 다테디프 poc (proof of concept) 이 문제를 해결하기 위해 미하이 에미네스쿠 (질문이예요 It 는 그 두 날짜 사이에 경과된 밀리초입니다 점을 뺀 것을 얻을 수 있으며, 그들 자신들의 의해 강제 변환 프리미티브 숫자 값 (밀리초입니다 시작 이후 1970년).
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
// new Date("dateString") is browser-dependent and discouraged, so we'll write
// a simple parse function for U.S. date format (which does no error checking)
function parseDate(str) {
var mdy = str.split('/');
return new Date(mdy[2], mdy[0]-1, mdy[1]);
}
function datediff(first, second) {
// Take the difference between the dates and divide by milliseconds per day.
// Round to nearest whole number to deal with DST.
return Math.round((second-first)/(1000*60*60*24));
}
alert(datediff(parseDate(first.value), parseDate(second.value)));
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>
끝 - < 스니핏 >;!
이 ", normal" 유의해야 합니다. 날짜 api (" 없이 UTC"; in the name) 의 국내 시간대 작동합니까 user& # 39 의 브라우저, 그래서 일반적으로 사용자 이 시간대 don& 하는 문제를 경험할 수 있다면, t, 그리고 코드에서 # 39 일광 절약 시간제 전환을 대처해야 할 수 있을 것으로 기대하고 있다. 해당 날짜에 대한 설명서를 잘 읽어야 합니다 객체와 메서드 및 모든 것에 대한 강력한 api 를 제공하는 라이브러리를 사용하여 더 안전하고 더 복잡한 강하게 고려해보십시오 날짜 단체다.
또한, 시, sub> < 그림으로의 스니핏 에서는 [창 '의' 라는 액세스만 객체에는] (https://www.w3.org/TR/html5/browsers.html # 창에서 객체에는 release. 액세스만) 을 간략하게 하지만 운영본 콩지름에 표준화했습니다 [게테르망베이드] (https://developer.mozilla.org/en-us/docs/web/api/document/getelementbyid) 또는 api 등 일부 ᅴ framework.<, /sub> 가능성이 더 높다.
이 중 하나만 vmware. 먹어서나, DST (daylight saving time) 변환을 다른 대답을 제대로 처리합니다. 캘리포니아 주 새너제이에 있는 시스템에 대한 결과가 나타납니다.
1/1/2013- 3/10/2013- 11/3/2013-
User Formula 2/1/2013 3/11/2013 11/4/2013 Result
--------- --------------------------- -------- --------- --------- ---------
Miles (d2 - d1) / N 31 0.9583333 1.0416666 Incorrect
some Math.floor((d2 - d1) / N) 31 0 1 Incorrect
fuentesjr Math.round((d2 - d1) / N) 31 1 1 Correct
toloco Math.ceiling((d2 - d1) / N) 31 1 2 Incorrect
N = 86400000
비록 ',' 올바른 결과를 it& # 39 의 다소 어설픈 마스트로런드 되돌려줍니다 생각한다. Utc 가 DST 를 대신 차지할 때, 또는 명시적으로 의해 변경되는지 오프셋할 motor1.1end 정확한 계산을 사용할 수 있습니다.
function treatAsUTC(date) {
var result = new Date(date);
result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
return result;
}
function daysBetween(startDate, endDate) {
var millisecondsPerDay = 24 * 60 * 60 * 1000;
return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}
alert(daysBetween($('#first').val(), $('#second').val()));
날짜 계산은 javascript 객체 (utc) 에 저장할 수 있기 때문에 '배' 데이트였어 까다로운 아니라 내부적으로 (현지 시간). 예를 들어, 3/10/2013 12:00& # 160; 키워봤지 태평양 표준시 (utc-08) 은 3/11/2013, 3/10/2013 로 8:00& # 160; 키워봤지 12:00& # 160; 저장됩니까 UTC 시간 (utc-07) 는 태평양 데일라이트로도 7:00& # 160; 키워봤지 키워봤지 저장됩니까 3/11/2013 로 지정하였다. 이날 자정부터 밤 (현지 시간) 는 불과 23 시간 동안 utc!
하루 24 시간 미만으로 더 있을 수 있지만 한국 시간으로 하루 24 시 (utc 에, 또는 hours.< sup> 1< /sup>, 항상 정확히요;; 위와 같은 방법을 활용하여 데스베트위너 '이' 이 사실을 먼저 '배' 를 빼고 모두 조정하십시오 호출하십시오 트레이타쉬츠 자정 UTC, 로컬 및 나누기 전에.
sup> <; 1. JavaScript, /sup> leap seconds.< 무시합니다.
가장 쉬운 방법은 차이점은 두 날짜:
var diff = Math.floor(( Date.parse(str2) - Date.parse(str1) ) / 86400000);
확보하십시오 차이 (일) (또는 난 경우 한쪽 또는 양쪽 구문 분석할 수 없습니다.) Parse 날짜 지베드 에서 결과를 밀리초입니다 및 이해했소 낮에 이를 통해 24 * 1000년 60 분할됩니다 60 봐야 합니다.
당신이 원한다면 나눈 일, 시간, 분, 초, 밀리초입니다:
function dateDiff( str1, str2 ) {
var diff = Date.parse( str2 ) - Date.parse( str1 );
return isNaN( diff ) ? NaN : {
diff : diff,
ms : Math.floor( diff % 1000 ),
s : Math.floor( diff / 1000 % 60 ),
m : Math.floor( diff / 60000 % 60 ),
h : Math.floor( diff / 3600000 % 24 ),
d : Math.floor( diff / 86400000 )
};
}
이것은 내 세이스트 버전 제임스 버전:
function mydiff(date1,date2,interval) {
var second=1000, minute=second*60, hour=minute*60, day=hour*24, week=day*7;
date1 = new Date(date1);
date2 = new Date(date2);
var timediff = date2 - date1;
if (isNaN(timediff)) return NaN;
switch (interval) {
case "years": return date2.getFullYear() - date1.getFullYear();
case "months": return (
( date2.getFullYear() * 12 + date2.getMonth() )
-
( date1.getFullYear() * 12 + date1.getMonth() )
);
case "weeks" : return Math.floor(timediff / week);
case "days" : return Math.floor(timediff / day);
case "hours" : return Math.floor(timediff / hour);
case "minutes": return Math.floor(timediff / minute);
case "seconds": return Math.floor(timediff / second);
default: return undefined;
}
}
내가 추천하는 모멘t.j스 사용하여 라이브러리 (http://momentjs.com/docs/ # / 디스플레이하여 / 차이 /). 일광 절약 시간을 작업할 수 있으며 일반적으로 매우 정확하게 처리한다.
예:
var start = moment("2013-11-03");
var end = moment("2013-11-04");
end.diff(start, "days")
1
꼭 이래야겠어요 박으래도 및 삼기 작은 유틸리티에는 및 항목이없습니다 너회가 발견하리니 이 기능을 사용할 수 있습니다. # 39 의 here& 짧은 예:
<script type="text/javascript" src="date.js"></script>
<script type="text/javascript">
var minutes = 1000*60;
var hours = minutes*60;
var days = hours*24;
var foo_date1 = getDateFromFormat("02/10/2009", "M/d/y");
var foo_date2 = getDateFromFormat("02/12/2009", "M/d/y");
var diff_date = Math.round((foo_date2 - foo_date1)/days);
alert("Diff date is: " + diff_date );
</script>
const startDate = '2017-11-08';
const endDate = '2017-10-01';
const timeDiff = (new Date(startDate)) - (new Date(endDate));
const days = timeDiff / (1000 * 60 * 60 * 24)
업데이트: 하지만 내가 이 질문을 그러니까말이야 속해 있지 않을 것이라고 할 수 있는 모든 날짜 계산 또는 조작 추천합니까 일반적으로 javascript 를 사용하는 것이 아니라, 바닐라 등 라리브러리 [날짜 fns] (https://date-fns.org) 또는 [모멘t.j스] (https://momentjs.com) 를 인한 it 많은 면쪽 건이다.
모멘t.j스 사용하여
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
var future = moment('05/02/2015');
var start = moment('04/23/2015');
var d = future.diff(start, 'days'); // 9
console.log(d);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>
끝 - < 스니핏 >;!
날짜 값을 JS 는 datetime 값.
따라서 직접판매용 날짜 계산을 일치하지 않습니다.
(2013-11-05 00:00:00) - (2013-11-04 10:10:10) < 1 day
예를 들어, 우리가 원하는 변환할지 드 2 날짜:
(2013-11-05 00:00:00) - (2013-11-04 00:00:00) = 1 day
될 수 있는 방법을 모두 잘라냅니다 밀링합니다 날짜:
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
var date1 = new Date('2013/11/04 00:00:00');
var date2 = new Date('2013/11/04 10:10:10'); //less than 1
var start = Math.floor(date1.getTime() / (3600 * 24 * 1000)); //days as integer from..
var end = Math.floor(date2.getTime() / (3600 * 24 * 1000)); //days as integer from..
var daysDiff = end - start; // exact dates
console.log(daysDiff);
date2 = new Date('2013/11/05 00:00:00'); //1
var start = Math.floor(date1.getTime() / (3600 * 24 * 1000)); //days as integer from..
var end = Math.floor(date2.getTime() / (3600 * 24 * 1000)); //days as integer from..
var daysDiff = end - start; // exact dates
console.log(daysDiff);
끝 - < 스니핏 >;!
주어진 날짜 계산을 위해 2 일 간 다음 코드를 사용할 수 있습니다. 날짜를 01일 1월 2016년, 31일 12월 2016년 내가 사용하는 볼 수 있습니다.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
var day_start = new Date("Jan 01 2016");
var day_end = new Date("Dec 31 2016");
var total_days = (day_end - day_start) / (1000 * 60 * 60 * 24);
document.getElementById("demo").innerHTML = Math.round(total_days);
<h3>DAYS BETWEEN GIVEN DATES</h3>
<p id="demo"></p>
끝 - < 스니핏 >;!
두 날짜 차이를 계산할 수 있으며 전체 대비성 일 휴식을 취한 다음 공식을 사용하여 여러 tz.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
var start = new Date('10/3/2015');
var end = new Date('11/2/2015');
var days = (end - start) / 1000 / 60 / 60 / 24;
console.log(days);
// actually its 30 ; but due to daylight savings will show 31.0xxx
// which you need to offset as below
days = days - (end.getTimezoneOffset() - start.getTimezoneOffset()) / (60 * 24);
console.log(days);
끝 - < 스니핏 >;!
더 나은 값으로 DST, 마테오스키 마테오프루어 등을 사용하여, UTC 시간:
var firstDate = Date.UTC(2015,01,2);
var secondDate = Date.UTC(2015,04,22);
var diff = Math.abs((firstDate.valueOf()
- secondDate.valueOf())/(24*60*60*1000));
이 예에서는 차이 보기입니다 109ppi 일입니다. 1000년 '는' 246060* one day in 밀리초입니다.
내가 찾은 이 질문은 내가 원할 때 몇 가지 가치, 내가 가지고 있는 두 개의 일자에 계산하십시오 날짜 시간, 분, & # 39 라는 질문에 @michael-liu 수정되었음 충족합니다 내 요구 사항, 이 안은 내 테스트.
diff '와' 일 '1' (2 시간) 01 00 비유하 31-12-2012 01-01-2013 23) 한다. diff '와' 일 '1' (46 시간) 01 00 01-01-2013 31-12-2012 23) 비유하 합니다.
function treatAsUTC(date) {
var result = new Date(date);
result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
return result;
}
var millisecondsPerDay = 24 * 60 * 60 * 1000;
function diffDays(startDate, endDate) {
return Math.floor(treatAsUTC(endDate) / millisecondsPerDay) - Math.floor(treatAsUTC(startDate) / millisecondsPerDay);
}
내 생각에는 솔루션뀉뀉뀉뀉 aren&, t use ceil 수정하십시오 꼭 이래야겠어요 100% # 39 층 windows용 대신 사용할 수 있지만, t # 39 라운드 isn& 적절한 운영할 수 있다.
function dateDiff(str1, str2){
var diff = Date.parse(str2) - Date.parse(str1);
return isNaN(diff) ? NaN : {
diff: diff,
ms: Math.ceil(diff % 1000),
s: Math.ceil(diff / 1000 % 60),
m: Math.ceil(diff / 60000 % 60),
h: Math.ceil(diff / 3600000 % 24),
d: Math.ceil(diff / 86400000)
};
}
[포르마다테] [1] 에서 다테피커 위젯을 사용하여 어때? 이를 사용할 수 있는 시간스탬프와 변환하십시오 날짜 형식 (밀리초입니다 이후 01/01/1970) 을 재동기화할 단순해졌습니다 빼기.
[1]: 벌린다테피커스포르마다테 http://docs.jquery.com/ui/datepicker/ 24%
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
function timeDifference(date1, date2) {
var oneDay = 24 * 60 * 60; // hours*minutes*seconds
var oneHour = 60 * 60; // minutes*seconds
var oneMinute = 60; // 60 seconds
var firstDate = date1.getTime(); // convert to milliseconds
var secondDate = date2.getTime(); // convert to milliseconds
var seconds = Math.round(Math.abs(firstDate - secondDate) / 1000); //calculate the diffrence in seconds
// the difference object
var difference = {
"days": 0,
"hours": 0,
"minutes": 0,
"seconds": 0,
}
//calculate all the days and substract it from the total
while (seconds >= oneDay) {
difference.days++;
seconds -= oneDay;
}
//calculate all the remaining hours then substract it from the total
while (seconds >= oneHour) {
difference.hours++;
seconds -= oneHour;
}
//calculate all the remaining minutes then substract it from the total
while (seconds >= oneMinute) {
difference.minutes++;
seconds -= oneMinute;
}
//the remaining seconds :
difference.seconds = seconds;
//return the difference object
return difference;
}
console.log(timeDifference(new Date(2017,0,1,0,0,0),new Date()));
끝 - < 스니핏 >;!
아닐 수도 있다는 것이 가장 세련된 솔루션, 코드, 비교적 간단한 질문에 대답 좀 있는 것 같다고 생각한다. # 39 can& 사용할 때, 이 같은 일이 없다.
function dayDiff(startdate, enddate) {
var dayCount = 0;
while(enddate >= startdate) {
dayCount++;
startdate.setDate(startdate.getDate() + 1);
}
return dayCount;
}
이것은 가정 틀렸다니까 반군지역 날짜 객체로 매개변수입니다.
내가 지금까지 발견된 가장 좋은 예는 위의 솔루션이므로 충스러웠으니 주석문입니다. https://stackoverflow.com/a/11252167/2091095. 하지만 그 결과 모든 일을 하려면 +1 사용할 수 있었다.
function treatAsUTC(date) {
var result = new Date(date);
result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
return result;
}
function daysBetween(startDate, endDate) {
var millisecondsPerDay = 24 * 60 * 60 * 1000;
return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
}
var diff = daysBetween($('#first').val(), $('#second').val()) + 1;
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
Date.prototype.days = function(to) {
return Math.abs(Math.floor(to.getTime() / (3600 * 24 * 1000)) - Math.floor(this.getTime() / (3600 * 24 * 1000)))
}
console.log(new Date('2014/05/20').days(new Date('2014/05/23'))); // 3 days
console.log(new Date('2014/05/23').days(new Date('2014/05/20'))); // 3 days
끝 - < 스니핏 >;!
난 이미 같은 문제를 언급하였다. 그 때문에 그는 복제본에 나는한다 덮어씁니다 첫 데이트였어. 날짜 시간 00:00:00 (당연히) 모두 있어야 합니다.
/*
* Deze functie gebruiken we om het aantal dagen te bereken van een booking.
* */
$scope.berekenDagen = function ()
{
$scope.booking.aantalDagen=0;
/*De loper is gelijk aan de startdag van je reservatie.
* De copy is nodig anders overschijft angular de booking.van.
* */
var loper = angular.copy($scope.booking.van);
/*Zolang de reservatie beschikbaar is, doorloop de weekdagen van je start tot einddatum.*/
while (loper < $scope.booking.tot) {
/*Tel een dag op bij je loper.*/
loper.setDate(loper.getDate() + 1);
$scope.booking.aantalDagen++;
}
/*Start datum telt natuurlijk ook mee*/
$scope.booking.aantalDagen++;
$scope.infomsg +=" aantal dagen: "+$scope.booking.aantalDagen;
};