Js如何操作日期

1,036 阅读2分钟

这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

写在前面

今天有一个前端页面上的需求,要在前端计算出两个日期的差值天数。

一通百度后,发现并没有什么好的方式,如果大家有好的方式,希望大家可以分享给我学习一下。

目前前端计算时间的差值,就只能通过分割日期字符串,分别取出年份、月份、天数三个主要的值,如果是计算相差的小时数、分钟数,甚至是秒数,那就只能更细分一下了。

下面来看一下我的解决方案吧,大家可以针对性的参考一下。

计算两个时间的相差天数

声明两个时间点。

var startDate = '2021-11-15';
var endDate = '2021-12-15';

首先分割日期时间

var startDate = '2021-11-15';
var endDate = '2021-12-15';
var startDates = startDate.split('-');
var endDates = endDate.split('-');

随后我们通过js内置方法将字符串转成数字

var startDate = '2021-11-15';
var endDate = '2021-12-15';
var startDates = startDate.split('-');
var endDates = endDate.split('-');
var startDateYear = parseInt(startDates[0]);
var startDateMonth = parseInt(startDates[1]);
var startDateDay = parseInt(startDates[2]);
var endDateYear = parseInt(startDates[0]);
var endDateMonth = parseInt(startDates[1]);
var endDateDay = parseInt(startDates[2]);

最后我们来计算一下相差的年、月、天

var startDate = '2021-11-15';
var endDate = '2021-12-15';
var startDates = startDate.split('-');
var endDates = endDate.split('-');
var startDateYear = parseInt(startDates[0]);
var startDateMonth = parseInt(startDates[1]);
var startDateDay = parseInt(startDates[2]);
var endDateYear = parseInt(startDates[0]);
var endDateMonth = parseInt(startDates[1]);
var endDateDay = parseInt(startDates[2]);

var year = endDateYear - startDateYear;
var month = endDateMonth - startDateMonth;
var day = endDateDay - startDateDay;

//这里我没有处理闰年和不同月份的天数不同,大家可以自行补充上。
var total = day * 1 + month * 30 + year * 365;

最终计算出相差的天数并封装成方法供他人调用

function diff(startDate, endDate){
    var startDates = startDate.split('-');
    var endDates = endDate.split('-');
    var startDateYear = parseInt(startDates[0]);
    var startDateMonth = parseInt(startDates[1]);
    var startDateDay = parseInt(startDates[2]);
    var endDateYear = parseInt(startDates[0]);
    var endDateMonth = parseInt(startDates[1]);
    var endDateDay = parseInt(startDates[2]);

    var year = endDateYear - startDateYear;
    var month = endDateMonth - startDateMonth;
    var day = endDateDay - startDateDay;

    //这里我没有处理闰年和不同月份的天数不同,大家可以自行补充上。
    return day * 1 + month * 30 + year * 365;
}

总结

以上就是如何计算两个时间的相差天数的解决方案了,大家还有什么更好的方案吗?