十壹 发表于 2025-1-3 17:14

日期时间格式化的库有没有什么好的选择

使用moment把日期格式化成“YYYY年第WW周”,但是最近用户报了个bug,2024-12-29和12-30 12-31都会被格式化成为2024年第01周。
思索半天大概是这玩意年份和月份是分开算了然后拼一块输出的(?) 有没有其他好用的库能正确格式化的

schneehertz 发表于 2025-1-3 17:15

dayjs




—— 来自 鹅球 v3.3.96-alpha

十壹 发表于 2025-1-3 17:21

schneehertz 发表于 2025-1-3 17:15
dayjs



支持的格式化占位符似乎没有第几周

lawsherman 发表于 2025-1-3 17:27

本帖最后由 lawsherman 于 2025-1-3 17:38 编辑

看了下文档


这是预期的行为。根据ISO 8601标准,2024年不是53周的一年。
有53个星期的长年度可以用下列任何一种同等的定义来描述:

[*]从星期四开始的任何一年(主字母D或DC)和从星期三开始的任何闰年(ED)
[*]周四结束的任何一年和周五结束的任何闰年
[*]1月1日和12月31日(通常年份)或(闰年)为星期四的年份


所以要使用 GGGG-WW,然后会显示为2025-01
使用YYYY-ww,会显示为2024-01
______
也就是说,按照ISO 8601标准,2024年应该就是没有第53周的
要生成2024年第53周,只能搞手动录入了

对线 发表于 2025-1-3 17:30

笑死
我们这系统才报了一个一样的bug
还被揪着复盘了

jiaqi12000 发表于 2025-1-3 17:36

我们集团也出这个bug了,连累我们子公司也出了问题,集团给出的解释是服务器时区不对,美国时区过了12月24号,算25年,我怎么想怎么不对,去年都没问题

—— 来自 鹅球 v3.3.96-alpha

Nanachi 发表于 2025-1-3 17:47

https://momentjs.com/docs/#/-project-status/recommendations/

Here are the alternatives we recommend:

Luxon
Luxon can be thought of as the evolution of Moment. It is authored by Isaac Cambron, a long-time contributor to Moment. Please read Why does Luxon exist? and the For Moment users pages in the Luxon documentation.

Locales: Intl provided
Time Zones: Intl provided
Day.js
Day.js is designed to be a minimalist replacement for Moment.js, using a similar API. It is not a drop-in replacement, but if you are used to using Moment's API and want to get moving quickly, consider using Day.js.

Locales: Custom data files that can be individually imported
Time Zones: Intl provided, via a plugin
date-fns
Date-fns offers a series of functions for manipulating JavaScript Date objects. For more details, scroll to "Why date-fns?" on the date-fns home page.

Locales: Custom data files that can be individually imported
Time Zones: Intl provided, via a separate companion library
js-Joda
js-Joda is a JavaScript port of Java's Three-Ten Backport, which is the base for JSR-310 implementation of the Java SE 8 java.time package. If you are familiar with java.time, Joda-Time, or Noda Time, you will find js-Joda comparable.

Locales: Custom data files via add-on module
Time Zones: Custom data files via add-on module

schneehertz 发表于 2025-1-3 17:49

看了下ISO 8601的定义,2024-12-30和2024-12-31是算在25年的第一周

zerocount 发表于 2025-1-3 17:53

笑死
不是bug 是feature

Joshua64 发表于 2025-1-3 17:57

zerocount 发表于 2025-1-3 17:53
笑死
不是bug 是feature

也不是,显示为2025年第01周可能是feature,但是显示为2024年第01周一定是bug

strayark 发表于 2025-1-3 17:59

本帖最后由 strayark 于 2025-1-3 18:00 编辑

根据ISO 8601,一年的第一周是包含该年的第一个周四的周次。这意味着,一年中不完整的第一个周会被放入前一年的最后一周

lawsherman 发表于 2025-1-3 18:04

Joshua64 发表于 2025-1-3 17:57
也不是,显示为2025年第01周可能是feature,但是显示为2024年第01周一定是bug

实际也是feature,moment.js有以ISO标准输出的参数
页: [1]
查看完整版本: 日期时间格式化的库有没有什么好的选择