微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 moment.js 如何将 day(0) 设置为本周的星期日而不是前一周

如何解决使用 moment.js 如何将 day(0) 设置为本周的星期日而不是前一周

我正在使用 moment.js 并执行以下操作:

moment().startOf('isoWeek').day(0)

不是给我本周的星期日 - 25 日,而是返回上一个星期日,18 日。

我在数据库中保存了 0-6 天(1 = 星期一,0 = 星期日)

我如何使用 0 来获得这个周的星期天而不是上一个星期天?

编辑:感谢所有回复。我想我现在只会在日期上增加一周,但从长远来看,可能会切换到在整个项目中使用 date-fns。谢谢。

解决方法

虽然 startOf('isoWeek') 使用星期一作为一周的第一天,但​​ .day(0) 使用 ECMAScript 定义并将您带回另一天(因为根据它的定义,before星期一属于相应的星期)。

要解决这个问题并获得即将到来的星期日,请使用 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/ 中建议的简写:

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("日期",日期);

在英语中,一周从星期日开始。这就是为什么您的代码在“上一个”星期日发回给您的原因。因为这周已经开始了。

但是要小心,Moment.Js si 现在贬值了。我建议您在项目中使用 date.fns。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。