جاوااسکریپت: اختلاف دو تاریخ [شمسی و میلادی] بر حسب روز و ساعت

ریپوسیتوری گیتهاب

شما میتوانید کدهای مربوط به این مینی پروژه جاوااسکریپت را در گیتهاب از لینک زیر دسترسی داشته باشید.

github repo

راه اول: محاسبه اختلاف روز بین دو تاریخ میلادی با getTime

همانطور که میدانید تابع getTime میلی ثانیه های یک تاریخ را میگیرد.

date1 = new Date(date1).getTime()
date2 = new Date(date2).getTime()

میلی ثانیه های یک روز برابر است با 1000 میلی در 60 ثانیه در 60 دقیقه در 24 ساعت که معادل 86400000 است.

بنابراین با تقسیم هر تاریخ به این عدد میتوان روز هایش را حساب کرد. و بعد تعداد روز ها را منها کرد تا اختلاف را بدست اورد.

var difference_seconds = date1 - date2
var difference_date = difference_seconds/86400000

اگر روز ها منفی شوند میتوان با یک علامت منفی ان را به مثبت تبدیل کرد.

if (difference_date < 0) { 
 difference_date = - difference_date 
}

نهایتا برای نمایش حاصل بدست امده این کدها را قرار میدهیم:

$("#result").text('The different is ' + difference_date + ' days!')

راه دوم: اختلاف ساعت و روز تاریخ شمسی  

از یکی از کتابخانه های jQuery برای شمسی کردن فیلد انتخاب تاریخ استفاده شد.

اینجا مثل راه قبل میلی ثانیه ها را با getTime نگرفتیم بلکه مقدار هر فیلد را گرفتیم. چهار فیلد داریم و چهار مقدار متفاوت.

var date1 = $("#date1").val()
var date2 = $("#date2").val()
var hour1 = $("#hour1").val()
var hour2 = $("#hour2").val()

برای اینکه فرمت استانداردی به خود بگیرند برای هریک استرینگ میسازیم:

var date1 = date1 +" - "+ hour1 + ":00"
var date2 = date2 +" - "+ hour2 + ":00"

حالا فرمت تاریخ به این شکل باید باشد که اول تاریخ سپس ساعت می اید.

1400-12-05 10:30:00

حالا میتوان ان را به دقیقه تبدیل کرد تا یک عدد باشد. سپس دقیقه به ساعت و ساعت به روز تبدیل میشود تا اختلاف مشخص شود.

var minutes = Math.abs(new Date(date1) - new Date(date2)) / 60000; 
var hours = Math.round(minutes / 60)
var days = Math.floor(hours / 24)
hours = hours % 24

نهایتا برای نمایش در بروزر میتوان از کد زیر استفاده کرد:

$("#result").text('The different is ' + days + ' days and ' + hours + ' hours!');