如何使用 Moment.js 获取今天和该月最后一天之间的天数?
How do I get the days between the today's day and the last day of the month using Moment.js?
这是我现在拥有的代码:
const moment = require('moment')
const m = moment
const currDay = m().format('D')
const dayOfWeek = m().format('dddd')
const daysInMonth = m().daysInMonth()
const startOfMonth = moment().startOf('month').format('YYYY-MM-DD hh:mm');
const endOfMonth = moment().endOf('month').format('YYYY-MM-DD hh:mm');
我需要创建一个日历行,其中第一个项目是今天的日期,其余日历项目将是剩余的天数,具体取决于当前月份,这样我就可以渲染每一天在我的 HTML 和 Vue.
之间
示例:8 日星期三、9 日星期四、10 日星期五 ... 31 日星期五。
我认为 OP 被过早格式化的常见错误绊倒了。 format 很适合查看中间结果,但这样做会产生一个不利于额外计算的字符串。
尝试只处理日期对象。仅在必须时才转换为字符串:(a) 呈现给人类 reader,或 (b) 序列化以供存储或传输。
没有格式化的工作...
const daysRemainingThisMonth = moment().endOf('month').diff(moment(), 'days');
console.log(`There are ${daysRemainingThisMonth} days remaining this month`)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
就像 POJS 的等价物一样,如果你有一个函数 return 这个月的最后一天,你可以使用它并得到两个日期之间的差异,例如
function getMonthEnd(date = new Date()) {
return new Date(date.getFullYear(), date.getMonth() + 1, 0);
}
function getMonthDaysLeft(date = new Date()) {
return getMonthEnd(date).getDate() - date.getDate();
}
let d = new Date();
console.log(`There are ${getMonthDaysLeft(d)} days left in ${d.toLocaleString('en',{month:'long'})}.`);
要获得 list/array 剩余天数,只需循环一个日期,一次添加 1 天,然后将日期以所需格式写入列表:
function getMonthDaysLeftAsList(date = new Date()) {
let d = new Date(+date);
// Formatter
let f = new Intl.DateTimeFormat('en',{
day: 'numeric',
month: 'short'
});
let m = d.getMonth();
let dayList = [];
while (d.getMonth() == m) {
dayList.push(f.format(d));
d.setDate(d.getDate() + 1);
}
return dayList;
}
console.log(getMonthDaysLeftAsList());
这是我现在拥有的代码:
const moment = require('moment')
const m = moment
const currDay = m().format('D')
const dayOfWeek = m().format('dddd')
const daysInMonth = m().daysInMonth()
const startOfMonth = moment().startOf('month').format('YYYY-MM-DD hh:mm');
const endOfMonth = moment().endOf('month').format('YYYY-MM-DD hh:mm');
我需要创建一个日历行,其中第一个项目是今天的日期,其余日历项目将是剩余的天数,具体取决于当前月份,这样我就可以渲染每一天在我的 HTML 和 Vue.
之间示例:8 日星期三、9 日星期四、10 日星期五 ... 31 日星期五。
我认为 OP 被过早格式化的常见错误绊倒了。 format 很适合查看中间结果,但这样做会产生一个不利于额外计算的字符串。
尝试只处理日期对象。仅在必须时才转换为字符串:(a) 呈现给人类 reader,或 (b) 序列化以供存储或传输。
没有格式化的工作...
const daysRemainingThisMonth = moment().endOf('month').diff(moment(), 'days');
console.log(`There are ${daysRemainingThisMonth} days remaining this month`)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
就像 POJS 的等价物一样,如果你有一个函数 return 这个月的最后一天,你可以使用它并得到两个日期之间的差异,例如
function getMonthEnd(date = new Date()) {
return new Date(date.getFullYear(), date.getMonth() + 1, 0);
}
function getMonthDaysLeft(date = new Date()) {
return getMonthEnd(date).getDate() - date.getDate();
}
let d = new Date();
console.log(`There are ${getMonthDaysLeft(d)} days left in ${d.toLocaleString('en',{month:'long'})}.`);
要获得 list/array 剩余天数,只需循环一个日期,一次添加 1 天,然后将日期以所需格式写入列表:
function getMonthDaysLeftAsList(date = new Date()) {
let d = new Date(+date);
// Formatter
let f = new Intl.DateTimeFormat('en',{
day: 'numeric',
month: 'short'
});
let m = d.getMonth();
let dayList = [];
while (d.getMonth() == m) {
dayList.push(f.format(d));
d.setDate(d.getDate() + 1);
}
return dayList;
}
console.log(getMonthDaysLeftAsList());