मैं दिन, घंटे, मिनट, सेकंड, मिलीसेकंड, नैनोसेकंड में तिथि अंतर की गणना करना चाहता हूं। मैं यह कैसे कर सकता हूं?
मैं दिन, घंटे, मिनट, सेकंड, मिलीसेकंड, नैनोसेकंड में तिथि अंतर की गणना करना चाहता हूं। मैं यह कैसे कर सकता हूं?
जवाबों:
मान लें कि आपके पास दो Date
ऑब्जेक्ट हैं , तो आप उन्हें मिलीसेकंड में अंतर प्राप्त करने के लिए घटा सकते हैं:
var difference = date2 - date1;
वहां से, आप अन्य मूल्यों को प्राप्त करने के लिए साधारण अंकगणित का उपयोग कर सकते हैं।
Math.floor((date2 - date1) / (1000*60*60*24))
किसी अन्य इकाई में अंतर करने के लिए दिनों में अंतर प्राप्त करना , हर को समायोजित करना (आधार मान ms में है)।
var DateDiff = {
inDays: function(d1, d2) {
var t2 = d2.getTime();
var t1 = d1.getTime();
return parseInt((t2-t1)/(24*3600*1000));
},
inWeeks: function(d1, d2) {
var t2 = d2.getTime();
var t1 = d1.getTime();
return parseInt((t2-t1)/(24*3600*1000*7));
},
inMonths: function(d1, d2) {
var d1Y = d1.getFullYear();
var d2Y = d2.getFullYear();
var d1M = d1.getMonth();
var d2M = d2.getMonth();
return (d2M+12*d2Y)-(d1M+12*d1Y);
},
inYears: function(d1, d2) {
return d2.getFullYear()-d1.getFullYear();
}
}
var dString = "May, 20, 1984";
var d1 = new Date(dString);
var d2 = new Date();
document.write("<br />Number of <b>days</b> since "+dString+": "+DateDiff.inDays(d1, d2));
document.write("<br />Number of <b>weeks</b> since "+dString+": "+DateDiff.inWeeks(d1, d2));
document.write("<br />Number of <b>months</b> since "+dString+": "+DateDiff.inMonths(d1, d2));
document.write("<br />Number of <b>years</b> since "+dString+": "+DateDiff.inYears(d1, d2));
यहां से लिया गया कोड का नमूना ।
एक अन्य समाधान अंतर को एक नई तिथि वस्तु में परिवर्तित करता है और उस तिथि का वर्ष (1970 से अलग), महीना, दिन आदि प्राप्त करता है।
var date1 = new Date(2010, 6, 17);
var date2 = new Date(2013, 12, 18);
var diff = new Date(date2.getTime() - date1.getTime());
// diff is: Thu Jul 05 1973 04:00:00 GMT+0300 (EEST)
console.log(diff.getUTCFullYear() - 1970); // Gives difference as year
// 3
console.log(diff.getUTCMonth()); // Gives month count of difference
// 6
console.log(diff.getUTCDate() - 1); // Gives day count of difference
// 4
इसलिए अंतर "3 साल और 6 महीने और 4 दिन" जैसा है। यदि आप मानव पठनीय शैली में अंतर करना चाहते हैं, तो यह आपकी मदद कर सकता है।
"दिनों में अंतर" जैसी अभिव्यक्तियाँ कभी भी इतनी सरल नहीं होती हैं जितनी वे लगती हैं। यदि आपके पास निम्नलिखित तारीखें हैं:
d1: 2011-10-15 23:59:00
d1: 2011-10-16 00:01:00
समय में अंतर 2 मिनट है, "दिनों में अंतर" 1 या 0 होना चाहिए? इसी तरह के मुद्दे महीने, साल या जो कुछ भी वर्षों, महीनों और दिनों के अंतर की किसी भी अभिव्यक्ति के लिए पैदा होते हैं, वे अलग-अलग लंबाई और अलग-अलग समय के होते हैं (जैसे दिन की बचत शुरू होने वाला दिन सामान्य से 1 घंटा कम और दिन के मुकाबले दो घंटे कम होता है) खत्म होता है)।
यहां उन दिनों के अंतर के लिए एक फ़ंक्शन है जो समय की अनदेखी करता है, अर्थात उपरोक्त तिथियों के लिए यह 1 रिटर्न देता है।
/*
Get the number of days between two dates - not inclusive.
"between" does not include the start date, so days
between Thursday and Friday is one, Thursday to Saturday
is two, and so on. Between Friday and the following Friday is 7.
e.g. getDaysBetweenDates( 22-Jul-2011, 29-jul-2011) => 7.
If want inclusive dates (e.g. leave from 1/1/2011 to 30/1/2011),
use date prior to start date (i.e. 31/12/2010 to 30/1/2011).
Only calculates whole days.
Assumes d0 <= d1
*/
function getDaysBetweenDates(d0, d1) {
var msPerDay = 8.64e7;
// Copy dates so don't mess them up
var x0 = new Date(d0);
var x1 = new Date(d1);
// Set to noon - avoid DST errors
x0.setHours(12,0,0);
x1.setHours(12,0,0);
// Round to remove daylight saving errors
return Math.round( (x1 - x0) / msPerDay );
}
यह अधिक संक्षिप्त हो सकता है:
/* Return number of days between d0 and d1.
** Returns positive if d0 < d1, otherwise negative.
**
** e.g. between 2000-02-28 and 2001-02-28 there are 366 days
** between 2015-12-28 and 2015-12-29 there is 1 day
** between 2015-12-28 23:59:59 and 2015-12-29 00:00:01 there is 1 day
** between 2015-12-28 00:00:01 and 2015-12-28 23:59:59 there are 0 days
**
** @param {Date} d0 - start date
** @param {Date} d1 - end date
** @returns {number} - whole number of days between d0 and d1
**
*/
function daysDifference(d0, d1) {
var diff = new Date(+d1).setHours(12) - new Date(+d0).setHours(12);
return Math.round(diff/8.64e7);
}
// Simple formatter
function formatDate(date){
return [date.getFullYear(),('0'+(date.getMonth()+1)).slice(-2),('0'+date.getDate()).slice(-2)].join('-');
}
// Examples
[[new Date(2000,1,28), new Date(2001,1,28)], // Leap year
[new Date(2001,1,28), new Date(2002,1,28)], // Not leap year
[new Date(2017,0,1), new Date(2017,1,1)]
].forEach(function(dates) {
document.write('From ' + formatDate(dates[0]) + ' to ' + formatDate(dates[1]) +
' is ' + daysDifference(dates[0],dates[1]) + ' days<br>');
});
<html lang="en">
<head>
<script>
function getDateDiff(time1, time2) {
var str1= time1.split('/');
var str2= time2.split('/');
// yyyy , mm , dd
var t1 = new Date(str1[2], str1[0]-1, str1[1]);
var t2 = new Date(str2[2], str2[0]-1, str2[1]);
var diffMS = t1 - t2;
console.log(diffMS + ' ms');
var diffS = diffMS / 1000;
console.log(diffS + ' ');
var diffM = diffS / 60;
console.log(diffM + ' minutes');
var diffH = diffM / 60;
console.log(diffH + ' hours');
var diffD = diffH / 24;
console.log(diffD + ' days');
alert(diffD);
}
//alert(getDateDiff('10/18/2013','10/14/2013'));
</script>
</head>
<body>
<input type="button"
onclick="getDateDiff('10/18/2013','10/14/2013')"
value="clickHere()" />
</body>
</html>
अपने सभी जावास्क्रिप्ट संबंधित दिनांक-समय गणना के लिए Moment.js का उपयोग करें
आपके प्रश्न का उत्तर है:
var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b) // 86400000
function DateDiff(date1, date2) {
date1.setHours(0);
date1.setMinutes(0, 0, 0);
date2.setHours(0);
date2.setMinutes(0, 0, 0);
var datediff = Math.abs(date1.getTime() - date2.getTime()); // difference
return parseInt(datediff / (24 * 60 * 60 * 1000), 10); //Convert values days and return value
}
क्षणिकाओं के साथ यह सरल है:
moment("2016-04-08").fromNow();
var d1=new Date(2011,0,1); // jan,1 2011
var d2=new Date(); // now
var diff=d2-d1,sign=diff<0?-1:1,milliseconds,seconds,minutes,hours,days;
diff/=sign; // or diff=Math.abs(diff);
diff=(diff-(milliseconds=diff%1000))/1000;
diff=(diff-(seconds=diff%60))/60;
diff=(diff-(minutes=diff%60))/60;
days=(diff-(hours=diff%24))/24;
console.info(sign===1?"Elapsed: ":"Remains: ",
days+" days, ",
hours+" hours, ",
minutes+" minutes, ",
seconds+" seconds, ",
milliseconds+" milliseconds.");
क्षमा करें, लेकिन फ्लैट मिलीसेकंड गणना विश्वसनीय नहीं है , सभी प्रतिक्रियाओं के लिए धन्यवाद, लेकिन मेरे द्वारा किए गए कार्यों में से कुछ भी असफल हो रहे हैं 1. आज की तारीख के पास एक तारीख। 1970 में एक तारीख या 3. एक लीप वर्ष में एक तारीख।
दृष्टिकोण कि मेरे लिए सबसे अच्छा काम किया और सभी परिदृश्य को शामिल किया गया जैसे कि लीप वर्ष, 1970 में तारीख के पास, फेब 29 आदि।
var someday = new Date("8/1/1985");
var today = new Date();
var years = today.getFullYear() - someday.getFullYear();
// Reset someday to the current year.
someday.setFullYear(today.getFullYear());
// Depending on when that day falls for this year, subtract 1.
if (today < someday)
{
years--;
}
document.write("Its been " + years + " full years.");
यदि आप moment.js का उपयोग कर रहे हैं, तो तिथि अंतर खोजना बहुत आसान है।
var now = "04/09/2013 15:00:00";
var then = "04/09/2013 14:20:30";
moment.utc(moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"))).format("HH:mm:ss")
function DateDiff(b, e)
{
let
endYear = e.getFullYear(),
endMonth = e.getMonth(),
years = endYear - b.getFullYear(),
months = endMonth - b.getMonth(),
days = e.getDate() - b.getDate();
if (months < 0)
{
years--;
months += 12;
}
if (days < 0)
{
months--;
days += new Date(endYear, endMonth, 0).getDate();
}
return [years, months, days];
}
[years, months, days] = DateDiff(
new Date("October 21, 1980"),
new Date("July 11, 2017")); // 36 8 20
मुझे लगता है कि यह करना चाहिए।
let today = new Date();
let form_date=new Date('2019-10-23')
let difference=form_date>today ? form_date-today : today-form_date
let diff_days=Math.floor(difference/(1000*3600*24))
यह है कि आप किसी फ्रेमवर्क के बिना तारीखों के बीच अंतर कैसे लागू कर सकते हैं।
function getDateDiff(dateOne, dateTwo) {
if(dateOne.charAt(2)=='-' & dateTwo.charAt(2)=='-'){
dateOne = new Date(formatDate(dateOne));
dateTwo = new Date(formatDate(dateTwo));
}
else{
dateOne = new Date(dateOne);
dateTwo = new Date(dateTwo);
}
let timeDiff = Math.abs(dateOne.getTime() - dateTwo.getTime());
let diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));
let diffMonths = Math.ceil(diffDays/31);
let diffYears = Math.ceil(diffMonths/12);
let message = "Difference in Days: " + diffDays + " " +
"Difference in Months: " + diffMonths+ " " +
"Difference in Years: " + diffYears;
return message;
}
function formatDate(date) {
return date.split('-').reverse().join('-');
}
console.log(getDateDiff("23-04-2017", "23-04-2018"));
function daysInMonth (month, year) {
return new Date(year, month, 0).getDate();
}
function getduration(){
let A= document.getElementById("date1_id").value
let B= document.getElementById("date2_id").value
let C=Number(A.substring(3,5))
let D=Number(B.substring(3,5))
let dif=D-C
let arr=[];
let sum=0;
for (let i=0;i<dif+1;i++){
sum+=Number(daysInMonth(i+C,2019))
}
let sum_alter=0;
for (let i=0;i<dif;i++){
sum_alter+=Number(daysInMonth(i+C,2019))
}
let no_of_month=(Number(B.substring(3,5)) - Number(A.substring(3,5)))
let days=[];
if ((Number(B.substring(3,5)) - Number(A.substring(3,5)))>0||Number(B.substring(0,2)) - Number(A.substring(0,2))<0){
days=Number(B.substring(0,2)) - Number(A.substring(0,2)) + sum_alter
}
if ((Number(B.substring(3,5)) == Number(A.substring(3,5)))){
console.log(Number(B.substring(0,2)) - Number(A.substring(0,2)) + sum_alter)
}
time_1=[]; time_2=[]; let hour=[];
time_1=document.getElementById("time1_id").value
time_2=document.getElementById("time2_id").value
if (time_1.substring(0,2)=="12"){
time_1="00:00:00 PM"
}
if (time_1.substring(9,11)==time_2.substring(9,11)){
hour=Math.abs(Number(time_2.substring(0,2)) - Number(time_1.substring(0,2)))
}
if (time_1.substring(9,11)!=time_2.substring(9,11)){
hour=Math.abs(Number(time_2.substring(0,2)) - Number(time_1.substring(0,2)))+12
}
let min=Math.abs(Number(time_1.substring(3,5))-Number(time_2.substring(3,5)))
document.getElementById("duration_id").value=days +" days "+ hour+" hour " + min+" min "
}
<input type="text" id="date1_id" placeholder="28/05/2019">
<input type="text" id="date2_id" placeholder="29/06/2019">
<br><br>
<input type="text" id="time1_id" placeholder="08:01:00 AM">
<input type="text" id="time2_id" placeholder="00:00:00 PM">
<br><br>
<button class="text" onClick="getduration()">Submit </button>
<br><br>
<input type="text" id="duration_id" placeholder="days hour min">
ठीक है, वहाँ तरीकों से आप ऐसा कर सकते हैं। हां, आप सादे पुराने जेएस का उपयोग कर सकते हैं। कोशिश करो:
let dt1 = new Date()
let dt2 = new Date()
आइए Date.prototyp.setMinutes का उपयोग करके मार्ग का अनुकरण करें और सुनिश्चित करें कि हम सीमा में हैं।
dt1.setMinutes(7)
dt2.setMinutes(42)
console.log('Elapsed seconds:',(dt2-dt1)/1000)
वैकल्पिक रूप से आप कुछ लाइब्रेरी जैसे js-joda का उपयोग कर सकते हैं , जहाँ आप आसानी से इस तरह के काम कर सकते हैं (डॉक्स से सीधे):
var dt1 = LocalDateTime.parse("2016-02-26T23:55:42.123");
var dt2 = dt1
.plusYears(6)
.plusMonths(12)
.plusHours(2)
.plusMinutes(42)
.plusSeconds(12);
// obtain the duration between the two dates
dt1.until(dt2, ChronoUnit.YEARS); // 7
dt1.until(dt2, ChronoUnit.MONTHS); // 84
dt1.until(dt2, ChronoUnit.WEEKS); // 356
dt1.until(dt2, ChronoUnit.DAYS); // 2557
dt1.until(dt2, ChronoUnit.HOURS); // 61370
dt1.until(dt2, ChronoUnit.MINUTES); // 3682242
dt1.until(dt2, ChronoUnit.SECONDS); // 220934532
वहाँ बहुत अधिक पुस्तकालयों ofc हैं, लेकिन js-joda में जावा में भी उपलब्ध होने का एक अतिरिक्त बोनस है, जहां इसका व्यापक परीक्षण किया गया है। उन सभी परीक्षणों को js-joda में स्थानांतरित कर दिया गया है, यह अपरिवर्तनीय भी है।
यह ठीक काम करना चाहिए, अगर आपको सिर्फ यह दिखाने की ज़रूरत है कि क्या समय बचा है, क्योंकि जावास्क्रिप्ट अपने समय के लिए फ्रेम का उपयोग करता है, तो आपको अपना अंत समय मिलेगा - समय आरएन इसके बाद हम इसे 1000 से विभाजित कर सकते हैं क्योंकि जाहिरा तौर पर 1000 फ्रेम = 1 सेकंड, उसके बाद आप समय के मूल गणित का उपयोग कर सकते हैं, लेकिन इस कोड के लिए अभी भी एक समस्या है, क्योंकि गणना स्थिर है, यह एक वर्ष (360/365/366) में अलग-अलग दिन कुल के लिए क्षतिपूर्ति नहीं कर सकता, का गुच्छा यदि गणना के बाद इसे शून्य से कम करना है, तो समय 0 से कम है, आशा है कि यह मदद करता है, हालांकि यह बिल्कुल वैसा नहीं है जैसा आप पूछ रहे हैं :)
var now = new Date();
var end = new Date("End Time");
var total = (end - now) ;
var totalD = Math.abs(Math.floor(total/1000));
var years = Math.floor(totalD / (365*60*60*24));
var months = Math.floor((totalD - years*365*60*60*24) / (30*60*60*24));
var days = Math.floor((totalD - years*365*60*60*24 - months*30*60*60*24)/ (60*60*24));
var hours = Math.floor((totalD - years*365*60*60*24 - months*30*60*60*24 - days*60*60*24)/ (60*60));
var minutes = Math.floor((totalD - years*365*60*60*24 - months*30*60*60*24 - days*60*60*24 - hours*60*60)/ (60));
var seconds = Math.floor(totalD - years*365*60*60*24 - months*30*60*60*24 - days*60*60*24 - hours*60*60 - minutes*60);
var Y = years < 1 ? "" : years + " Years ";
var M = months < 1 ? "" : months + " Months ";
var D = days < 1 ? "" : days + " Days ";
var H = hours < 1 ? "" : hours + " Hours ";
var I = minutes < 1 ? "" : minutes + " Minutes ";
var S = seconds < 1 ? "" : seconds + " Seconds ";
var A = years == 0 && months == 0 && days == 0 && hours == 0 && minutes == 0 && seconds == 0 ? "Sending" : " Remaining";
document.getElementById('txt').innerHTML = Y + M + D + H + I + S + A;