এই লেখার হিসাবে, অন্য উত্তরগুলির মধ্যে একটি সঠিকভাবে ডিএসটি (দিবালোক সংরক্ষণের সময়) রূপান্তরগুলি পরিচালনা করে। ক্যালিফোর্নিয়ায় অবস্থিত একটি সিস্টেমে ফলাফল এখানে:
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
যদিও Math.round
সঠিক ফলাফলগুলি প্রদান করে, আমি মনে করি এটি কিছুটা জটিল un পরিবর্তে, ডিটিএসটি শুরু বা শেষ হলে ইউটিসি অফসেটে পরিবর্তনের জন্য স্পষ্টভাবে অ্যাকাউন্টিং করে আমরা সঠিক পাটিগণিত ব্যবহার করতে পারি:
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()));
ব্যাখ্যা
জাভাস্ক্রিপ্টের তারিখ গণনাগুলি জটিল কারণ Date
বিষয়গুলি স্থানীয় সময় নয়, ইউটিসি-তে অভ্যন্তরীণভাবে সঞ্চয় করে store উদাহরণস্বরূপ, 3/10/2013 12:00 এএম প্যাসিফিক স্ট্যান্ডার্ড সময় (UTC-08: 00) 3/10/2013 8:00 AM UTC, এবং 3/11/2013 12:00 এএম প্যাসিফিক দিবালোক সময় ( ইউটিসি -07: 00) 3/11/2013 7:00 পূর্বাহ্ণ ইউটিসি হিসাবে সঞ্চিত রয়েছে। এই দিন, মধ্যরাত থেকে মধ্যরাত স্থানীয় সময়টি ইউটিসিতে মাত্র 23 ঘন্টা!
যদিও স্থানীয় সময়ে কোনও দিনে 24 ঘন্টা কম বা কম সময় থাকতে পারে, ইউটিসিতে একটি দিন সর্বদা 24 ঘন্টা থাকে। 1daysBetween
পদ্ধতি উপরে দেখানো প্রথম ডাকে এই সত্য সুবিধা নেয় treatAsUTC
বিয়োগ এবং বিভাজক আগে, মধ্যরাত ইউটিসি উভয় স্থানীয় বার সমন্বয়।
1. জাভাস্ক্রিপ্ট লিপ সেকেন্ডে উপেক্ষা করে।