使用 moment.js 如何将 day(0) 设置为本周而不是上周的星期日
Using moment.js how do I set day(0) as Sunday this week instead of previous week
我正在使用 moment.js 并且正在执行以下操作:
moment().startOf('isoWeek').day(0)
不是给我这周的星期日 - 25 日,而是 returns 前一个星期日,18 日。
我在数据库中保存了从 0 到 6 的天数(1 = 星期一,0 = 星期日)
如何使用 0 获取这周的星期日而不是前一个星期日?
编辑: 感谢所有回复。我想我现在只是将日期增加一周,但从长远来看,可能会转为在整个项目中使用 date-fns
。谢谢
虽然 startOf('isoWeek')
使用星期一作为一周的第一天,但 .day(0)
使用 ECMAScript 定义并将您带回另一天(因为根据其定义,星期日 之前星期一属于相应的一周)。
要解决此问题并获得即将到来的星期日,请按照 https://momentjscom.readthedocs.io/en/latest/moment/03-manipulating/01-add/ 中所述使用 moment 的 add
函数再添加一周:
moment().startOf('isoWeek').day(0).add(1, 'weeks')
或按照 https://momentjscom.readthedocs.io/en/latest/moment/02-get-set/06-day/ 上的建议使用 shorthand:
moment().startOf('isoWeek').day(7);
moment.js 周 从周日开始 并在周六结束。这是日历的常用格式(虽然不是我喜欢的格式)。
您可以通过将日期设置为 8
而不是 0
来使其环绕。
也就是说,Moment.js 的开发人员自己说“We now generally consider Moment to be a legacy project in maintenance mode.”并列出了您可能不想使用它的一些原因。
一种流行的替代方法是 date-fns,它允许您编写如下代码:
<script type=module>
import { nextSunday, formatISO, startOfWeek } from 'https://esm.run/date-fns';
const today = new Date();
const start = startOfWeek(today, { weekStartsOn: 1 }); // 1 is Monday
const sunday = nextSunday(today)
console.log(formatISO(sunday));
</script>
您可以在 0 之后添加 + 7 以获得“下一个”星期日。像这样:
const date = moment().startOf("isoWeek").day(0 + 7);
console.log("date", date);
在英语中,一周从星期日开始。这就是为什么您的代码会在“前一个”星期日发回给您。因为这周已经开始了。
但要小心,Moment.Js si 现在贬值了。我建议您为您的项目使用 date.fns。
我正在使用 moment.js 并且正在执行以下操作:
moment().startOf('isoWeek').day(0)
不是给我这周的星期日 - 25 日,而是 returns 前一个星期日,18 日。
我在数据库中保存了从 0 到 6 的天数(1 = 星期一,0 = 星期日)
如何使用 0 获取这周的星期日而不是前一个星期日?
编辑: 感谢所有回复。我想我现在只是将日期增加一周,但从长远来看,可能会转为在整个项目中使用 date-fns
。谢谢
虽然 startOf('isoWeek')
使用星期一作为一周的第一天,但 .day(0)
使用 ECMAScript 定义并将您带回另一天(因为根据其定义,星期日 之前星期一属于相应的一周)。
要解决此问题并获得即将到来的星期日,请按照 https://momentjscom.readthedocs.io/en/latest/moment/03-manipulating/01-add/ 中所述使用 moment 的 add
函数再添加一周:
moment().startOf('isoWeek').day(0).add(1, 'weeks')
或按照 https://momentjscom.readthedocs.io/en/latest/moment/02-get-set/06-day/ 上的建议使用 shorthand:
moment().startOf('isoWeek').day(7);
moment.js 周 从周日开始 并在周六结束。这是日历的常用格式(虽然不是我喜欢的格式)。
您可以通过将日期设置为 8
而不是 0
来使其环绕。
也就是说,Moment.js 的开发人员自己说“We now generally consider Moment to be a legacy project in maintenance mode.”并列出了您可能不想使用它的一些原因。
一种流行的替代方法是 date-fns,它允许您编写如下代码:
<script type=module>
import { nextSunday, formatISO, startOfWeek } from 'https://esm.run/date-fns';
const today = new Date();
const start = startOfWeek(today, { weekStartsOn: 1 }); // 1 is Monday
const sunday = nextSunday(today)
console.log(formatISO(sunday));
</script>
您可以在 0 之后添加 + 7 以获得“下一个”星期日。像这样:
const date = moment().startOf("isoWeek").day(0 + 7);
console.log("date", date);
在英语中,一周从星期日开始。这就是为什么您的代码会在“前一个”星期日发回给您。因为这周已经开始了。
但要小心,Moment.Js si 现在贬值了。我建议您为您的项目使用 date.fns。