使用Moment.js从特定日期算起的几天/几周前



我使用moment.js,我有3个不同的日期,例如

  • 2018年7月30日
  • 2018年6月12日
  • 2018年5月10日

我现在试图获得从这些日期到今天的天数(如果不到7天前(或到今天的周数(如果超过7天前(的差异,并将其放在几个跨度中。

更新 感谢Thomas

我得到了:

$(document).ready(function(){
$('.timestamp').html((index, html) => {
let date = moment(html, "DD.MM.YYYY HH:mm", true), 
now = moment(),
days = Math.floor(Math.abs(date - now) / 86400000), 
weeks = Math.floor(days/7),
result = date.format("DD.MM.YYYY") + " - ";
if(weeks){
result += weeks + (weeks===1? " week ": " weeks ");
days = days % 7;        
}
if(days || weeks===0){
result += days + (days === 1? " day": " days");
}
return result;
});
});

我仍然需要:

  • 不显示初始日期,只显示"3 Days"。如果它删除了"结果",我想再工作了。

  • 不显示"7 weeks 2 days",这应该只是"7 weeks"

这是实际的小提琴

Moment.js具有fromNow((函数,该函数从当前日期/时间返回"x天"或"x小时前"。

moment([2007, 0, 29]).fromNow();     // 4 years ago
moment([2007, 0, 29]).fromNow(true); // 4 years

您可以使用momentjsdiff()方法来完成此操作,该方法可以返回daysweeksmonthshoursminutes中两个dates之间的差。。。基于您传递给它的选项。

这应该是你的代码:

now = moment()
days = now.diff(date, "days")
weeks = now.diff(date, "weeks")

演示:

$(document).ready(function() {
$('.timestamp').html((index, html) => {
let date = moment(html, "DD.MM.YYYY HH:mm", true),
now = moment(),
days = now.diff(date, "days"),
weeks = now.diff(date, "weeks"),
result = "";
if (weeks) {
result += weeks + (weeks === 1 ? " week " : " weeks ");
days = days % 7;
} else if (days || weeks === 0) {
result += days + (days === 1 ? " day" : " days");
}
result += '<br />';
return result;
});
});
<span class="timestamp">30.07.2018 00:00</span>
<span class="timestamp">12.06.2018 00:00</span>
<span class="timestamp">10.05.2018 00:00</span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>

const getTime = (date) => {
let result = moment(date).fromNow();
const now = moment();
const days = now.diff(date, 'days');
const weeks = now.diff(date, 'weeks');
if (days >= 7) {
if (days <= 13) {
result = `a week ago`;
} else if (days > 13 && days <= 25) {
result = `${weeks} weeks ago`;
}
}
return result;
};
getTime("2023-03-07 12:21:51") // 3 days ago
getTime("2023-02-28 12:21:51") // a week ago
getTime("2023-02-07 12:21:51") // a month ago

最新更新