以月为单位计算给定日期范围内的天数,使用momentjs计算天数
count the number of days in a given date range in months, days using momentjs
如何从给定日期范围获得确切的天数?例:
today = moment("2016-06-29")
due = moment("2016-05-13")
days_left = today.diff(due, 'days'); // returns 47
但我希望它显示1个月零16天?
您可以使用Moment.js精确范围插件以人类可读的格式精确显示日期/时间范围。
var today = moment("2016-06-29");
var due = moment("2016-05-13");
var days_left = moment.preciseDiff(today, due); // '1 month 16 days'
一个普通的javascript方法:
function calendarDiff( date1, date2){
var later = false;
if( date1 > date2){
later = true;
var temp = date2;
date2 = date1;
date1 = temp;
}
date1 = date1.split("-");
var y1 = date1[0], m1 = date1[1], d1 = date1[2];
date2 = date2.split("-");
var y2 = date2[0], m2 = date2[1], d2 = date2[2];
if( (d2 -= d1) < 0){
d2 += new Date(y1, m1, 0).getDate(); // *note
++m1;
}
if( (m2 -= m1) < 0){
m2 += 12;
++y1;
}
y2 = y2 - y1;
return {years: y2, months: m2, days: d2, later: later};
}
方法接受两个格式为"YYYY-MM-DD"的日期字符串。返回的对象包含日历日期差异作为数值属性值,如果date1
晚于date2
,则later
设为true。
*注:在需要借阅时,根据(我的)答案和(RobG)对较早错误日期差异问题的评论,在较早日期的月份中添加天数。
例子var today = "2016-06-29";
var due = "2016-05-13";
JSON.stringify( calendarDiff( today, due) );
//= {"years":0,"months":1,"days":16,"later":true}
感谢您的所有输入,我能够得到的日子使用下面不是最佳的,但它的工作。我想知道是否有一个简单的答案
today = moment("2016-06-29")
due = moment("2016-05-13")
months_past_due = today.diff(due_date, 'months')
month_before_today = due_date.add(months_past_due, 'months')
days_past_due = today.diff(month_before_today, 'days')
alert(months_past_due + " "+ days_past_due)
一个问题,如果:
today = moment("2015-02-28");
due_date = moment("2015-01-30");
我应该考虑过期1个月还是29天?上面的代码显示是29天
这显然可以更好,但它的工作,我很高兴它现在基于@traktor53的代码(谢谢!)
希望有人觉得这有用
function formatDate(date) {
var later = false;
const date1 = new Date();
const date2 = new Date(date);
let resultString = '';
if (date1 < date2) {
return 'Recently';
}
var y1 = date1.getFullYear(),
m1 = date1.getMonth() + 1,
d1 = date1.getDate();
var y2 = date2.getFullYear(),
m2 = date2.getMonth() + 1,
d2 = date2.getDate();
if (y1 - y2) {
if (y1 - y2 == 1) {
return `a year ago`;
}
return `${y1 - y2} years ago`;
}
if (m1 - m2) {
if (m1 - m2 == 1) {
return `a month ago`;
}
return `${m1 - m2} months ago`;
}
if (d1 - d2) {
if (d1 - d2 > 7) {
return `${Math.floor(d1 - d2 / 7)} weeks ago`;
}
if (d1 - d2 == 7) {
return `a week ago`;
}
if (d1 - d2 < 7) {
return `${d1 - d2} days ago`;
}
}
}
这是一个纯javascript解决方案
d1 = new Date("2016-06-29");
d2 = new Date("2016-05-13");
differ = new Date(
d1.getFullYear() - d2.getFullYear(),
d1.getMonth() - d2.getMonth(),
d1.getDate() - d2.getDate()
);
然后,您可以从diff日期对象(如differ.getYear()
, differ.getMonth()
和differ.getDate()
)中获得不同的年,月和日
相关文章:
- 根据元素和容器大小计算边距
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 使用D3.js计算带有字母间距的文本长度
- 使用CSS或JavaScript计算分页符的数量
- 可以't计算自定义谷歌地图的js
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- JavaScript计算帮助(乘以时间)
- 如何计算对象文字中的键
- JavaScript循环无法正确计算/显示结果
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- 四舍五入JavaScript计算
- 计算HTML中的页数
- 使用jQuery计算数组中的对象以更改进度条
- 如何在jquery中使用实时计算求和值
- 计算多个项目的价格
- 计算CSS3缩放框在另一个框中的最高位置
- 如何计算二十面体的法线
- if(foo!==null)的计算结果为true,即使foo为null
- 使用 MomentJS 计算日期在月边界上的差值
- 以月为单位计算给定日期范围内的天数,使用momentjs计算天数