从今天开始使用 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>
我需要在我的 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>