与所选日期相对应的月份中的天数
Number of days in the months corresponding to selected dates
我需要从两个日期之间选择的月份中找出天数作为天数。比如我选择date1为2021年1月1日,date2为2021年3月1日,那么我需要得到一月、二月、三月的总天数。
输出=
一月天数+二月天数+三月天数=31+28+31
我尝试了什么:
const getDiff=(selectedDate1,selectedDate2)=>{
console.log('Date check',moment(selectedDate1).daysInMonth(),moment(new Date()).daysInMonth())
if(moment(selectedDate1).daysInMonth() - moment(selectedDate2).daysInMonth() ===0){
return Number(moment(selectedDate1).daysInMonth())
}else{
return Number(moment(selectedDate1).daysInMonth())+Number(moment(selectedDate2).daysInMonth())
}
}
但是使用这段代码,我只得到所选日期的天数总和,即。只有一月的天数 + 三月的天数
几件事:
请记住,Java 和 Java 脚本中的月份是(愚蠢的)从 0 开始的。所以第 1 个月是二月
要获取一个月中的天数,您可以使用 Date 对象并转到下个月的第一天,然后减去 1 天,然后调用 getDay。
两个日期之间的毫秒数为
var d1 = ...;
var d2 = ...;
var duration = Math.abs(d2.getTime() - d1.getTime());
然后,您可以将 duration
除以毫秒 (1000)、秒 (60)、分钟 (60) 等,以获得单位为单位的时间跨度
最简单的方法是:
// 'lo' and 'hi' could be of type Date or numbers coming from Date.getTime()
const daysBetween = (lo, hi) => {
const oneDayInMilliseconds
= 1000 // one sec has 1000 millis
* 3600 // one hour has 3600 seconds
* 24; // one day has 24 hours
return (hi - lo) / oneDayInMilliseconds;
}
使用 moment.js,您只需得到开始月份开始和结束月份结束之间的天数加 1 的差值(因为月底不包括最后一天,加 1 是比转到下个月的月初更简单),例如
function wholeMonthDays(d1, d2) {
let diff = moment(d2).endOf('month').diff(moment(d1).startOf('month'),'days') + 1;
return diff;
}
let start = new Date(2021,0,21);
let end = new Date(2021,2,11);
console.log(wholeMonthDays(start, end)); // 90
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
或者,您可以在 结束 之后的月初获取差值:
function wholeMonthDays(d1, d2) {
let start = moment(d1).startOf('month');
let end = moment(d2).startOf('month').add(1, 'month');
let diff = end.diff(start, 'days');
return diff;
}
let start = new Date(2021, 0, 21);
let end = new Date(2021, 2, 11);
console.log(wholeMonthDays(start, end)); // 90
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
我将日期设置为月内,以表明它添加了“月中的天数”,而不仅仅是两个日期之间的差异。
如果你真的想要每个月的总天数数组,只需将开始设置为月末,获取日期,添加一个月,设置为月末,等等,直到你已经过了月底。
我需要从两个日期之间选择的月份中找出天数作为天数。比如我选择date1为2021年1月1日,date2为2021年3月1日,那么我需要得到一月、二月、三月的总天数。
输出=
一月天数+二月天数+三月天数=31+28+31
我尝试了什么:
const getDiff=(selectedDate1,selectedDate2)=>{
console.log('Date check',moment(selectedDate1).daysInMonth(),moment(new Date()).daysInMonth())
if(moment(selectedDate1).daysInMonth() - moment(selectedDate2).daysInMonth() ===0){
return Number(moment(selectedDate1).daysInMonth())
}else{
return Number(moment(selectedDate1).daysInMonth())+Number(moment(selectedDate2).daysInMonth())
}
}
但是使用这段代码,我只得到所选日期的天数总和,即。只有一月的天数 + 三月的天数
几件事:
请记住,Java 和 Java 脚本中的月份是(愚蠢的)从 0 开始的。所以第 1 个月是二月
要获取一个月中的天数,您可以使用 Date 对象并转到下个月的第一天,然后减去 1 天,然后调用 getDay。
两个日期之间的毫秒数为
var d1 = ...; var d2 = ...; var duration = Math.abs(d2.getTime() - d1.getTime());
然后,您可以将 duration
除以毫秒 (1000)、秒 (60)、分钟 (60) 等,以获得单位为单位的时间跨度
最简单的方法是:
// 'lo' and 'hi' could be of type Date or numbers coming from Date.getTime()
const daysBetween = (lo, hi) => {
const oneDayInMilliseconds
= 1000 // one sec has 1000 millis
* 3600 // one hour has 3600 seconds
* 24; // one day has 24 hours
return (hi - lo) / oneDayInMilliseconds;
}
使用 moment.js,您只需得到开始月份开始和结束月份结束之间的天数加 1 的差值(因为月底不包括最后一天,加 1 是比转到下个月的月初更简单),例如
function wholeMonthDays(d1, d2) {
let diff = moment(d2).endOf('month').diff(moment(d1).startOf('month'),'days') + 1;
return diff;
}
let start = new Date(2021,0,21);
let end = new Date(2021,2,11);
console.log(wholeMonthDays(start, end)); // 90
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
或者,您可以在 结束 之后的月初获取差值:
function wholeMonthDays(d1, d2) {
let start = moment(d1).startOf('month');
let end = moment(d2).startOf('month').add(1, 'month');
let diff = end.diff(start, 'days');
return diff;
}
let start = new Date(2021, 0, 21);
let end = new Date(2021, 2, 11);
console.log(wholeMonthDays(start, end)); // 90
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
我将日期设置为月内,以表明它添加了“月中的天数”,而不仅仅是两个日期之间的差异。
如果你真的想要每个月的总天数数组,只需将开始设置为月末,获取日期,添加一个月,设置为月末,等等,直到你已经过了月底。