如何获得指定日期范围内的确切天数? 恩。给出以下内容:
today = moment("2016-06-29")
due = moment("2016-05-13")
days_left = today.diff(due, 'days'); // returns 47
但我希望它显示1个月和16天?
答案 0 :(得分:5)
您可以使用Moment.js Precise Range插件以人类可读的格式精确显示日期/时间范围。
var today = moment("2016-06-29");
var due = moment("2016-05-13");
var days_left = moment.preciseDiff(today, due); // '1 month 16 days'
答案 1 :(得分:0)
感谢您的所有输入,我能够让使用下面的日子不是最佳的,但它的工作原理。我想知道是否有一行答案,但
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天。
答案 2 :(得分:0)
简单的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};
}
该方法采用格式为&#34; YYYY-MM-DD&#34;的两个日期字符串。返回的对象包含日历日期差异作为数字属性值,如果later
晚于date1
,则date2
设置为true。
*注意:根据(我的)答案和(RobG)对早期wrong date difference问题的评论,在需要借用的较早日期的月份中添加天数。
实施例
var today = "2016-06-29";
var due = "2016-05-13";
JSON.stringify( calendarDiff( today, due) );
//= {"years":0,"months":1,"days":16,"later":true}
答案 3 :(得分:0)
这显然可以更好,但它可以工作,我现在对此感到满意 基于@ 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`;
}
}
}
答案 4 :(得分:-1)
这是一个纯粹的JavaScript解决方案
differ.getYear()
然后,您可以从差异日期对象中获取差异年份,月份和日期,例如differ.getMonth()
,differ.getDate()
和compile 'com.google.code.gson:gson:2.7'