首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编码ISO年周53个问题

编码ISO年周53个问题
EN

Stack Overflow用户
提问于 2021-09-02 03:09:18
回答 1查看 178关注 0票数 1

我正在尝试编写一个函数,以找到一年中ISO周。我找到了关于它的ISO周Wiki页面,其中包括了这个算法:

代码语言:javascript
复制
woy = (10 + doy − dow) div 7

它大部分工作,但我有两个问题,不知道如何解决它。

问题1)第53周--实际上应该是第1周。(即20191230至20191231周)--作为第53周,但应该是第1周。

第二期)第53周的飞跃年。(即20210101到20210103)它们将作为第0周出现,但应该是第53周。

是否有一种干净的方法来改变/增加这个公式来解释上述问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-02 09:50:40

维基百科引用的文章确实包含了这些边界案例的说明:

  • 如果获得的周数等于0,则表示给定日期属于上一个(基于周的)年份。
  • 如果获得53周的周数,则必须检查该日期实际上不在下一年的第一周。

这里的缺点是您仍然需要一个函数weeks。如果您没有那么容易获得,那么下面是另一种方法:

  1. 将给定日期移动到同一周的星期四。因此,对于星期五、星期六或星期天,你会向后走,而在其他日子(星期四除外),你会及时向前移动。显然,周四的产出应该是一样的,因为我们在同一周。
  2. 应用该日期的公式。显然,dow现在(星期四)总是4,所以公式简化为(6 + doy) div 7

让我们在给出的示例中使用此方法:

  • 2019年12月30日是星期一,因此我们将讨论到2020年1月2日星期四。对于该日期,doy为2,公式(6 + doy) div 7给出1作为结果。
  • 2021年1月1日是星期五,所以我们回到2020年12月31日星期四。对于那个日期,doy是366,公式(6 + doy) div 7给出的结果是53。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69023651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档