如何在 Javascript 中将周数转换为日期

2023-11-21

我曾试图找到一些已完成的工作,但我没有运气。有任何想法吗?

例子:

2001 年第 1 周 => 2001-01-01

2007 年 26 日 => 2007-06-01


由于 Kevin 的代码没有正确实现 ISO 8601(一年第一周的第一天必须是星期一),我已更正它并最终得到(也在 jsfiddle 上检查一下):

function firstDayOfWeek(week, year) { 

    if (year==null) {
        year = (new Date()).getFullYear();
    }

    var date       = firstWeekOfYear(year),
        weekTime   = weeksToMilliseconds(week),
        targetTime = date.getTime() + weekTime;

    return date.setTime(targetTime); 

}

function weeksToMilliseconds(weeks) {
    return 1000 * 60 * 60 * 24 * 7 * (weeks - 1);
}

function firstWeekOfYear(year) {
    var date = new Date();
    date = firstDayOfYear(date,year);
    date = firstWeekday(date);
    return date;
}

function firstDayOfYear(date, year) {
    date.setYear(year);
    date.setDate(1);
    date.setMonth(0);
    date.setHours(0);
    date.setMinutes(0);
    date.setSeconds(0);
    date.setMilliseconds(0);
    return date;
}

/**
 * Sets the given date as the first day of week of the first week of year.
 */
function firstWeekday(firstOfJanuaryDate) {
    // 0 correspond au dimanche et 6 correspond au samedi.
    var FIRST_DAY_OF_WEEK = 1; // Monday, according to iso8601
    var WEEK_LENGTH = 7; // 7 days per week
    var day = firstOfJanuaryDate.getDay();
    day = (day === 0) ? 7 : day; // make the days monday-sunday equals to 1-7 instead of 0-6
    var dayOffset=-day+FIRST_DAY_OF_WEEK; // dayOffset will correct the date in order to get a Monday
    if (WEEK_LENGTH-day+1<4) {
        // the current week has not the minimum 4 days required by iso 8601 => add one week
        dayOffset += WEEK_LENGTH;
    }
    return new Date(firstOfJanuaryDate.getTime()+dayOffset*24*60*60*1000);
}

function assertDateEquals(effectiveDate, expectedDate, description) {
    if ((effectiveDate==null ^ expectedDate==null) || effectiveDate.getTime()!=expectedDate.getTime()) {
        console.log("assert failed: "+description+"; effective="+effectiveDate+", expected="+expectedDate);
    }
}
function assertEquals(effectiveValue, expectedValue, description) {
    if (effectiveValue!=expectedValue) {
        console.log("assert failed: "+description+"; effective="+effectiveValue+", expected="+expectedValue);
    }
}

// expect the first day of year to be a monday
for (var i=1970; i<2050; i++) {
    assertEquals(firstWeekOfYear(i).getDay(), 1, "first day of year "+i+" must be a monday"); // 1=Monday
}

// assert some future first day of first week of year; source: http://www.epochconverter.com/date-and-time/weeknumbers-by-year.php
assertDateEquals(firstWeekOfYear(2013), new Date(Date.parse("Dec 31, 2012")), "2013");
assertDateEquals(firstWeekOfYear(2014), new Date(Date.parse("Dec 30, 2013")), "2014");
assertDateEquals(firstWeekOfYear(2015), new Date(Date.parse("Dec 29, 2014")), "2015");
assertDateEquals(firstWeekOfYear(2016), new Date(Date.parse("Jan 4, 2016")), "2016");
assertDateEquals(firstWeekOfYear(2017), new Date(Date.parse("Jan 2, 2017")), "2017");
assertDateEquals(firstWeekOfYear(2018), new Date(Date.parse("Jan 1, 2018")), "2018");
assertDateEquals(firstWeekOfYear(2019), new Date(Date.parse("Dec 31, 2018")), "2019");
assertDateEquals(firstWeekOfYear(2020), new Date(Date.parse("Dec 30, 2019")), "2020");
assertDateEquals(firstWeekOfYear(2021), new Date(Date.parse("Jan 4, 2021")), "2021");
assertDateEquals(firstWeekOfYear(2022), new Date(Date.parse("Jan 3, 2022")), "2022");
assertDateEquals(firstWeekOfYear(2023), new Date(Date.parse("Jan 2, 2023")), "2023");
assertDateEquals(firstWeekOfYear(2024), new Date(Date.parse("Jan 1, 2024")), "2024");
assertDateEquals(firstWeekOfYear(2025), new Date(Date.parse("Dec 30, 2024")), "2025");
assertDateEquals(firstWeekOfYear(2026), new Date(Date.parse("Dec 29, 2025")), "2026");

console.log("All assertions done.");

我包含了一些日期的测试用例,以检查一年中第一周的第一天是星期一,并根据以下内容检查了一些日期http://www.epochconverter.com/date-and-time/weeknumbers-by-year.php

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Javascript 中将周数转换为日期 的相关文章

  • 如何使用 HTML 元素阻止 THREE.js 光线投射?

    我希望页面上的 HTML 元素阻止 THREE js 光线投射 我该如何执行此操作 我遇到的问题是 当用户单击打开的 DIV 元素时 光线投射会检索场景中的对象 它会检索 DIV 后面的对象 我不想在 DIV 打开时禁用光线投射 我纯粹希望
  • nuxt如何访问javascript文件中的env

    我无法在 nuxt 2 15 之外访问我的环境变量 当我部署时我可以看到 nuxt context config在浏览器中有正确的变量 但在自定义js文件中我无法访问process env baseURL它返回未定义 nuxt config
  • iOS Javascript DOM“冻结?”

    这里有几个问题 有没有办法阻止 iOS 在滚动时冻结页面上的 javascript 当您在另一个选项卡中或切换应用程序时 iOS 是否会冻结 JavaScript iOS 上还有其他主要的 javascript 限制吗 iOS 6 x 会暂
  • 如何共享 Swagger 文档

    我最近开始使用 Swagger 来编写文档 但有一些事情我仍然不清楚 我创建了 YAML 文档 现在我希望能够与团队的其他成员共享 pdf 或 HTML Javascript 页面中的文档 我无法使用 SwaggerHub 因为它们没有私有
  • jQuery show() 和 hide() 的更流畅替代方案

    我有一个带有隐藏列的页面设置 使用 jQuery show 和 hide 函数将列滑入和滑出 然而 它有点 笨重 并且在显示 隐藏时看起来不太流畅 相比之下 我还有一个使用 jquery UI 手风琴的页面部分 当在这些部分之间切换时 过渡
  • Jodatime 日期格式

    是否可以格式化 JodaTime 日期 这是代码 private static LocalDate priorDay LocalDate date1 do date1 date1 plusDays 1 while date1 getDayO
  • CKEDITOR.styleSet.add - 'a' 元素的新样式

    由于某种原因如果我改变 p to a 它不再出现在样式列表中 有什么理由吗 CKEDITOR stylesSet add default name Wys wiersza 1 element p styles line height 18p
  • 从画布保存/转换后文件质量下降的问题

    这是我正在使用的代码 代码位于这篇文章的底部 但这里是链接GitHubGist Noitidart ff addon snippet browseForBadgeThenCreateSaveAnApply js https gist git
  • 我可以阻止history.popstate在初始页面加载时触发吗?

    我正在开发一个通过 AJAX 提供内容的网站 如果您单击菜单中的某个项目 内容 div 会更新为 get回应 没什么花哨的 我正在实施history pushState允许使用浏览器的后退 前进按钮进行导航 我有以下内容可以在历史导航上加载
  • 如何使用Javascript获取ASP.NEt Web Forms标签的值?

    我有以下标签控件
  • 什么是{| ... |} 在 JavaScript 中是什么意思? [复制]

    这个问题在这里已经有答案了 通读 javascript 代码库 我遇到了如下代码块 export type RouteReducerProps error Error isResolving boolean isResolved boole
  • Jasmine 单元测试不等待承诺解析

    我有一个有角度的服务 它具有像这样的异步依赖项 function angular module app factory myService q asyncService function q asyncService var myData
  • Angular2,测试和解析数据:如何测试 ngOnInit?

    我正在通过Angular2 测试指南 https angular io docs ts latest guide testing html并希望编写一个测试ngOnInit 功能 那个来自编程指南的路由部分 https angular io
  • Angular2 - 防止复选框被选中

    我有一个每行包含一个复选框的表 在表头中 我有一个Check All切换所有表格行框的复选框 我正在尝试实现一些逻辑 如果复选框的数量将超过特定限制 则显示错误并且不切换表行复选框或checkall盒子本身 有一个问题允许checkAll即
  • 扩展html表格突出显示行和列并使当前单元格具有不同的颜色

    我找到了用鼠标悬停时突出显示行和列的示例 https stackoverflow com a 28312853 139698 https stackoverflow com a 28312853 139698 如何使鼠标悬停的一个单元格变为
  • 处理照片上传的最佳方式是什么?

    我正在为一个家庭成员的婚礼制作一个网站 他们要求的一个功能是一个照片部分 所有客人都可以在婚礼结束后前往并上传他们的照片 我说这是一个很棒的想法 然后我就去实现它 那么只有一个问题 物流 上传速度很慢 现代相机拍摄的照片很大 2 5 兆 我
  • Meteor JS:存储特定模板实例状态的最佳方法是什么?

    我正在学习 Meteor JS 中的会话和反应式数据源 它们非常适合设置全局 UI 状态 但是 我不知道如何将它们的范围限制到模板的特定实例 这就是我想做的 我的页面上有多个可内容编辑的元素 每个下面都有一个 编辑 按钮 当用户单击 编辑
  • 将base64图像转换为Node Js中的文件

    我是 Node Js 新手 我需要包含用户的个人资料图片 我从 IOS 应用程序收到 Base64 图像的请求 我需要将其存储在 images 文件夹中并将图像路径保存在 mongodb 数据库中 我使用了以下代码 var bitmap n
  • 编辑时可以在文本框控件内使用 Angular 的管道格式化程序吗?

    我已经声明了一种将大数字分成三位数组的格式 并像这样经常使用它 div Huge number i am huge make threesome div 现在 有一个对相应功能的请求 但在像这样的输入控件中实现
  • JavaScript 开关(真)

    你好 我正在尝试处理 ajax json 响应 这是我的代码 success function j switch true case j choice1 alert choice2 break case j choice2 alert ch

随机推荐

  • 使用 Firebase 获取 downloadURL 不断抛出错误“XMLHttpRequest 未定义”

    当尝试获取刚刚上传到存储的图像的 downloadURL 时 我不断收到 XMLHttpRequest 未定义 消息 对这里发生的事情有什么想法吗 我可以检索元数据 但图像 url 未在方案中列出 Node import firebase
  • 将具有唯一 id 属性的对象数组转换为 Map

    我有一个对象数组 其中每个对象都有一个名为的唯一成员id 如何创建地图id如果地图的钥匙 您想将数组减少为地图 const arr id 1 id 2 id 2 const map arr reduce acc item gt acc se
  • 如何从应用程序客户端连接远程 EJB 模块

    我的计算机上的远程 Glassfish 服务器和应用程序客户端中有一个 EJB 模块 我想从应用程序客户端连接到远程 EJB 这是我的 EJB 界面 Remote public interface BookEJBRemote public
  • 使用cowplot和ggplot2在某些行周围绘制边框

    我想以某种方式表明多面板图中的某些行应该一起比较 例如 我想绘制这个图 如下图所示 用 PowerPoint 制作的面板周围有方框 这是我为使用第一个图而编写的代码 我使用了ggplot和cowplot require cowplot th
  • 引用变量存储在哪里[重复]

    这个问题在这里已经有答案了 我知道引用不会占用任何内存 它会指向它所引用的同一内存位置 例如 int i 10 int r a suppose i指向内存位置 1000 所以在这种情况下r也将指向内存位置 1000 但在 C 中 每当我们声
  • MongoCursor 中的 Limit 和 BatchSize 有什么区别?

    MongoDB 游标对象提供了BatchSize财产and and Limit属性 但我似乎找不到任何明确的信息来正确阐明两者之间的区别 我正在使用 Net 驱动程序 因为它物有所值 限制是您想要的结果总数 如果您的查询将返回 1000 个
  • 有人知道 OOP PHP 的良好培训资源吗?

    我想看看大家是否可以分享一些关于 PHP 语言的 OOP 的好的培训资源 有人知道 OOP 面向对象编程 PHP 的良好培训资源吗 我看过很多教程 大部分都是肤浅的 其中一些很糟糕 Please分享任何好的商业或免费 视频或书面内容 我喜欢
  • 如何手动设置 gradle-2.2.1-all.zip

    我想用这个命令运行我的单元测试 gradlew bat connectedInstrumentTest 但它尝试下载https services gradle org distributions gradle 2 2 1 all zip 我
  • 从 JavaScript 调用 ASP.NET MVC 操作方法

    我有这样的示例代码 div class cart a class button span Add to Cart span a div div class wishlist a Add to Wish List a div div clas
  • 如何在Scala中实例化Unit?

    我所希望的只是使用一些并发集 似乎根本不存在 Java用途java util concurrent ConcurrentHashMap
  • “保护”文本框值不被输入(HTML 表单)

    我想知道是否可以为 HTML 文本框分配一个值并保护它 我的意思是使其内容不可修改 这样当提交表单时我 确定 提交的是这个值 顺便说一句 我意识到更简单的方法是不 监听 此输入并仅分配它 但它会派上用场 能够执行上述操作 我希望这个问题足够
  • 使用jquery自动打印

    我有以下格式的数据 虚拟条目 id posGridView 当我处理销售时 会自动打印一张小收据 其中包含选定的列 而不是所有列 因为所有数据都在此网格视图中可用 所以如何使用 jquery 以任何格式动态打印它 Edited 实际上我想从
  • 单一职责原则对于验证意味着什么

    单一责任原则是否意味着您的验证规则应该位于实体外部 如果是这样 您是否为每个验证规则使用一个类 我通常将其解释为 实体 和实体的验证应该是单独的问题 我通常会使用可以验证整个实体的单个类 但我认为没有理由通过不允许该类使用其他类来限制其实现
  • DocumentListener Java,如何防止 JTextBox 中出现空字符串?

    I have been working on a personal project to get better with programming My goal is to make it much more robust I am jus
  • 按年份区间对行进行分组

    我有一个表 tbl people 在这个表中我有一个日期时间字段 我想对 10 年组中的记录进行分组和计数 结果应该类似于 计数 年 1000 1980 1989 250 1990 1999 我可以编写多个查询来执行此操作 但这意味着我必须
  • 如何使用 Linq to ADO.NET 实体框架进行全文搜索 (FTS)?

    现在 SQL Server 2008 已经内置了全文搜索 我希望使用它来增强我网站的搜索功能 我也在考虑为我的 ORM 使用 ADO NET 实体框架 但我想知道如何使用 Linq to ADO NET 实体框架进行全文搜索 FTS ADO
  • 在 Objective C 中将 @import 与 __cplusplus 结合使用

    当我尝试编译链接到使用新 import 指令的文件的 Objective C 文件 mm 时 出现一些错误 目前 我唯一的解决方案是将 import 替换为旧的 import 指令 还有其他解决方案让我仍然可以使用 import吗 Edit
  • Html.EditorFor Onchange 事件

    我正在开发一个 MVC4 应用程序 我想改变已更改我的模型中的字段 当model ExternalVenderNo被改变了 以下是查看页面的代码 div class editor field Html EditorFor model gt
  • 了解堆栈对齐

    我正在阅读英特尔手册关于堆栈帧 值得注意的是 输入参数区域的末尾应按 16 对齐 32 如果 m256在堆栈上传递 字节边界 我不太明白这是什么意思 是不是意味着rsp应该指向始终与16对齐的地址吗 我尝试尝试并编写了非常简单的程序 sec
  • 如何在 Javascript 中将周数转换为日期

    我曾试图找到一些已完成的工作 但我没有运气 有任何想法吗 例子 2001 年第 1 周 gt 2001 01 01 2007 年 26 日 gt 2007 06 01 由于 Kevin 的代码没有正确实现 ISO 8601 一年第一周的第一