从今天开始使用 moment js 获取 2 周的天数

Get 2 weeks of days from today using moment js

我需要在我的 React 本机应用程序中显示从今天算起 14 天的日期。例如假设今天是第 26 个星期五。在我的应用程序中,我想将天数列表显示为

26 - today
27 - saturday
28 - sunday
01 - monday
02 - tuesday
............
12 - friday

我如何使用 momentjs 获得这样的日子,或者是否有更好的方法来代替使用 momentjs。 我参考了 momentjs 文档并四处寻找类似的问题,但找不到任何与我需要得到的类似的东西。

如果您使用的是 momentjs,您可以执行以下操作:moment().add(2, 'weeks') 获取从现在起 2 周后的日期数。

要获取从现在起 2 周后的那一天的名称,您可以这样做:moment().add(2, 'weeks').format('dddd')

console.log(`${moment().add(2, 'weeks').format('DD')} - ${moment().add(2, 'weeks').format('dddd')}`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

要获取从今天到某个日期的所有日期,您可以对其执行循环:

var enumerateDaysBetweenDates = function(startDate, endDate) {
  var now = startDate,
    dates = [];

  while (now.isSameOrBefore(endDate)) {
    dates.push(`${now.format('DD')} - ${now.format('dddd')}`);
    now.add(1, 'days');
  }
  return dates;
};

var fromDate = moment();
var toDate = moment().add(2, 'weeks');
var results = enumerateDaysBetweenDates(fromDate, toDate);
console.log(results);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

或者,如果您不想使用任何库,您可以使用内置的 Javascript 方法 toLocaleDateString:

var enumerateDaysBetweenDates = function(startDate, endDate) {
  var now = startDate,
    dates = [];
  const options = { weekday: 'long'};

  while (now <= endDate) {
    dates.push(`${now.getDate()} - ${now.toLocaleDateString(undefined, options)}`);
    now.setDate(now.getDate()+1);
  }
  return dates;
};

var from = new Date();
var to = new Date();
to.setDate(to.getDate()+14);

var results = enumerateDaysBetweenDates(from, to);
console.log(results);

您可能还想查看 momentjs 文档中的 Parse Date Format

此代码段将执行您需要的相同输出

let days = [];
days.push(moment().format("Do - dddd"));
for (let index = 1; index <= 14; index++) {
  let day = moment().subtract(index, "days").format("Do - dddd");
  days.push(day);
}

然后打印数组。以您喜欢的方式度过一天

就我个人而言,我认为 MomentJS 对于这个和最简单的约会对象来说太过分了!如果您不需要它,它是一个漂亮的 big/expensive 库。

编辑: 按照评论中的要求添加了月份名称,我也添加了一些评论,以便您可以遵循逻辑。请注意,这仅适用于 'cross over the end of one month',因为 14 天永远不会超过,但可以添加更多行代码来处理超过 28 天的列表。

function myFunction() {

  daysArr = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
  monthsArr = ['january' , 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december']
  // array of month names 

  var d = new Date()
  // var d = new Date(2021, 1, 25) 
  // you can test other dates by passing (year, month, day) into the date constructor 
  // note the months start at 0, february is 1, and so on

  var day = d.getDay() - 1
  var date = d.getDate()
  var month = d.getMonth() // get the month numerically - january is returned as 0 and so on
  var daysInMonth = new Date(d.getFullYear(), d.getMonth()+1, 0).getDate();
  let daysList = ''

  for (let i=0; i<14; i++) {
    if (i===0) {
      daysList += date + ' - today - ' + monthsArr[month] + '<br>'
    } else {
      daysList += date + ' - ' + daysArr[day] + ' - ' + monthsArr[month] + '<br>'
      // add the month name from monthsArr to our print out
    }
    day++
    date++
    if (day === 7) {
        day=0
    }
    if (date > daysInMonth) {
      date=1
      month++ // increment the month so the rest of the list gets the next month name
    }
  }
  document.getElementById("demo").innerHTML = daysList;
}
<button onclick="myFunction()">List Days</button>

<p id="demo"></p>