前端使用 element 的周选择器,是基于 momentJS 的,但是时间与 Java 计算的却不一样

2020-09-18 10:20:13 +08:00
 jiangnan01

RT,现在的需求是要做一个报表提醒功能,用户设置一个报表有效期限例如 2020 年第 1 周到 2021 年第 52 周,并且每周三提醒当前周的报表。但是 java 在执行的时候需要知道当天属于当年的第几周,使用 Calendar 类转换的时候与前端周选择器控件输出的不一一致,尤其是跨年的时候,前端计算出来的可能是当年有 53 周,java 计算可能只有 52 周。所以想知道大家是怎么解决这类周期转换问题的

2449 次点击
所在节点    Java
10 条回复
ITsWHY
2020-09-18 10:34:05 +08:00
日期格式的问题我们是前端做的
easonHHH
2020-09-18 10:38:03 +08:00
一般的 API 都支持配置从索引 0 开始或者从 1 开始(没有自己封装一层也行),又或者是周一 /周日作为周开始的吧,如果这些配置都统一的情况下,计算出来就是一样
Torpedo
2020-09-18 10:44:44 +08:00
我记得是部分浏览器上,java 的 utc 时间解析和 js 不一样。
用 unix 时间戳就没事
jiangnan01
2020-09-18 10:45:05 +08:00
@ITsWHY 在报表配置的时候遇到这个问题,我们也是这样做的,我前端给 java 把日期区间额外转换一份对应的第 N 周-第 n 周的数据,现在因为这个报表提醒是 java 后台自己跑的定时任务,需要 java 获取当前的时间然转换成当前属于第几周,这个时候跟前端转换的可能不一样
jiangnan01
2020-09-18 10:46:00 +08:00
@Torpedo 是在 chrome 运行的
jiangnan01
2020-09-18 10:48:02 +08:00
@easonHHH 请问 JAVA 是怎么设置这个周几作为一周开始的呢?我只知道前端可以使用 momentJS 设置语言然后设置周几作为一周开始,甚至一年的第一周以几月几日开始
easonHHH
2020-09-18 10:55:21 +08:00
@jiangnan01 #6 Java 不熟,但是看了一眼 API 文档里面应该是有的
https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html
setFirstDayOfWeek(int value)
Sets what the first day of the week is; e.g., SUNDAY in the U.S., MONDAY in France.
jiangnan01
2020-09-18 11:36:17 +08:00
@easonHHH 谢谢,找到了,再加上 setMinimalDaysInFirstWeek 这个方法可以和前端对应上了
Justin13
2020-09-18 12:42:00 +08:00
isoweek 和 us week 的区别,方法就是前后端用同一套规则
renmu123
2020-09-18 13:34:52 +08:00
都用符合 iso 规范的库吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/708199

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX