【问题标题】:Differences between weekNumber in Mongo and LuxonMongo 和 Luxon 中的 weekNumber 之间的差异
【发布时间】:2021-03-08 07:55:17
【问题描述】:

我正在对日期进行一些 mongo 聚合并遇到了一个有趣的问题,即从 mongo 返回的 $week 与从 Luxon 返回的 weekNumber 不同。

在下面的代码 sn-ps 中,mongo 的 $week 返回 47,而 Luxon 的 weekNumber 返回 48。

有没有办法将两者标准化,以便给定日期返回相同的 $week/weekNumber?

我可以从 Luxon 返回的值中减去一个,但我想了解为什么响应不同,以确定是否有更合适/更优雅的方法来解决此问题。

MONGO:

[{
    '$match': {
        'date': {
            '$eq': datetime(2020, 11, 23, 0, 0, 0, tzinfo=timezone.utc)
          }
        }
    }, {
    '$project': {
        'w': {
            '$week': '$date'
        }
    }
}]

LUXON:

import { DateTime } from "luxon";

var week = DateTime.fromJSDate(new Date(2020,10,23)).weekNumber;
console.log(week);

【问题讨论】:

    标签: mongodb date aggregation-framework luxon


    【解决方案1】:

    查看文档:

    weekNumber:

    周历:有关 ISO 周历属性,请参阅 weekYear、weekNumber 和 weekday 访问器。

    $week:

    将日期作为 0 到 53 之间的数字返回一年中的第几周。

    周从星期日开始,第 1 周从一年中的第一个星期日开始。一年中第一个星期日之前的日子在第 0 周。此行为与 strftime 标准库函数的“%U”运算符相同。

    如果您想根据 ISO-8601 获取周数,请使用 $isoWeek():

    以 ISO 8601 格式返回周数,范围从 1 到 53。周数从 1 开始,其中包含一年的第一个星期四的周(周一到周日)。

    看起来在 Luxon 中没有相当于 MongoDB 的 $week

    【讨论】:

    • 谢谢你,温弗里德! $isoWeek() 是完美的。
    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    • 2010-10-19
    • 2020-09-15
    • 2014-06-30
    • 2011-11-16
    • 2011-05-08
    相关资源
    最近更新 更多