首先,需要了解一个国际标准:ISO8601,该标准是国际标准化组织用来定义日期和时间的表示方法,全称是《数据存储和交换形式·信息交换·日期和时间的表示方法》。其中有关第几周的计算,在WIKI上有如下描述:
日历星期和日表示法
可以用2位数表示本年内第几个日历星期,再加上一位数表示日历星期内第几天,但日历星期前要加上一个大写字母W,如2004年5月3日可写成2004-W17-3或2004W173。以1月4日所在的那个星期为当年的第一个星期,如:2005年1月1日是2004-W53-6,2005年1月3日是2005-W01-1。每个日历星期从星期一开始,星期日为第7天。
在上述描述中,需要重点关注两个方面:
1、每个日历星期从星期一开始,星期日为第七天。
2、以1月4日所在的那个星期为当年的第一个星期。
上述两项可以作为求今天是本年第几周的理论根据。
在jQuery UI的 datepicker中找到下面函数 ISO8601Week():
/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. * @param date Date - the date to get the week for * @return number - the number of the week within the year that contains this date */ iso8601Week: function(date) { var time,checkDate = new Date(date.getTime()); // Find Thursday of this week starting on Monday checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); time = checkDate.getTime(); checkDate.setMonth(0); // Compare with Jan 1 checkDate.setDate(1); return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; }
难点就在于跨年的计算上,但是结合上面ISO8601的规定,很容易理清楚jQueryUI中的思路。
如果1月4日为周一,则,1,2,3号是去年的最后一周。
如果1月4日为周二,则,1,2号是去年的最后一周。
如果1月4日为周三,则,1号为去年的最后一周。
如果1月4日为周四,则,周一即为开始。
如果1月4日为周五,则,侵占去年的最后一天。
如果1月4号为周六,则,侵占去年的最后两天。
如果1月4日为周日,则,侵占去年的最后三天。
由此可见,只需要根据当前日期所处的本周的周四,就可以推断出当前日期属于第几周了。可以根据所处的周四与本年度的一月一号比较,得到当前日期属于本年度的第几周,上面JQUERY的算法完全就是这个思路。有这个,我们就可以很容易的使用任何我们想用的语言来计算当前周是第几周了。
作者 陈字文(热衷于PM\ORACLE\JAVA等,欢迎同行交流)EMAIL:ziwen@163.com QQ:409020100.
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>datepicker demo</title> <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"> <script src="http://code.jquery.com/jquery-1.9.1.js"></script> <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> </head> <body> <div id="datepicker"></div> <script> $( "#datepicker" ).datepicker({ showWeek: true, weekHeader: "W", firstDay: 1, changeMonth:true, changeYear:true, onSelect:function(date,inst){ alert(getWeek(date)); } }); function getWeek(date) { var time,week,checkDate = new Date(date); checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); time = checkDate.getTime(); checkDate.setMonth(0); checkDate.setDate(1); week=Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; return $.datepicker.formatDate('yy',checkDate)+'W'+(week<10?'0':'')+week; } </script> </body> </html>上面的代码可以作为测试.
相关推荐
在开发工具方面,日期和时间的处理也可以通过第三方库来增强,例如JavaScript中的moment.js和luxon,或者Python的dateutil。这些库提供了更高级的功能,如时区转换、日期解析和格式化模板等。 在源码层面,理解日期...
"带农历的js日期显示(包含农历闰月)"是一个专门用于处理农历日期的JavaScript函数库,它提供了丰富的功能,如显示天干、地支、属相以及时辰等,还能够准确判断农历的闰月情况。 首先,让我们了解一下农历的基础...
尽管原生 JavaScript 提供了处理日期的功能,但在实际开发中,通常会使用 Moment.js 这样的第三方库来更方便地处理日期。 - **安装 Moment.js**: ```bash npm install moment ``` - **示例代码**: ```...
本文将深入探讨“带农历的js日期源码”这一主题,帮助开发者理解如何在JavaScript中实现农历日期功能。 首先,JavaScript原生并不支持农历日期处理,因此我们需要引入额外的库或者自定义函数来实现这个功能。这款...
为了在JavaScript中处理农历日期,开发者通常会依赖第三方库,如`Chinese-Lunar-Calendar`、`lunar-js`或`calendar-js`等。这些库提供了农历与公历相互转换的函数,可以方便地在应用中集成。 3. **农历转换算法**...
在JavaScript中,可以通过遍历日期对象,对比数据结构来判断当前日期是否为特定的节日或节气。 至于压缩包中的`date.js`,这可能是一个实现了上述功能的JavaScript库,它可能包含了公历和农历的转换函数,以及节日...
在JavaScript(JS)中,判断某一天是星期几是一个常见的需求,尤其是在开发涉及日期操作的应用时。本篇文章将深入解析如何使用JS来实现这一功能,包括理解提供的代码片段以及提供一个更为直观和易于理解的方法。 ##...
本压缩包"农历阳历日期节日JS代码.zip"提供了这样的功能,它包含了一个JavaScript代码文件,能够帮助开发者在网页上显示农历日期以及对应的节日信息。 首先,JavaScript是一种广泛用于网页动态效果和交互的编程语言...
标签中的“js日历算法”、“js日历”、“javascript日历算法”表明了该算法主要利用JavaScript语言的特点来实现,且该算法是专为日历功能定制的。 从部分内容来看,算法的主要知识点可以总结如下: 1. 判断闰年的...
从给定的文件信息来看,这段代码涉及到一个与农历(阴历)相关的JavaScript日期控件。这个控件主要用于处理和转换农历日期,包括计算月份天数、闰月判断、闰日计算以及根据年份获取干支等。下面将对这些核心功能进行...
黄道择吉,源于中国古代天文历法,是一种根据天体运行规律来判断吉凶的传统习俗。在现代,这种文化融入了编程技术,特别是在网页开发中,可以为用户提供方便的日期选择服务,同时展示每日宜忌信息。这个"黄道择吉js...
本文介绍的是一种使用jQuery获取某天农历日期,并判断该日期是否为除夕或新年的方法。这个方法涉及到对日期和时间的操作技巧,具体包括以下几个知识点: 1. **农历日期的计算**:农历,也称为阴历、月亮历或中国...
前6位代表的是行政区划代码,第7到14位是出生日期,格式为YYYYMMDD,第15到17位是顺序码(奇数分配给男性,偶数分配给女性),最后一位是校验码。校验码可能是数字或字母X。 要从身份证号码中提取出生日期,可以...
标题中的“JS简单获取当前日期和农历日期的方法”揭示了本文将介绍如何在JavaScript中实现获取当前日期以及对应的农历日期。这一主题对于希望将日期信息融入网页中,尤其是需要展示与中国传统节日或农历日期相关的...
6. **性能优化**:对于大量网页数据,快速判断日期是个挑战。可以考虑使用多线程或多进程并行处理,或者使用更高效的数据结构和算法。 7. **错误处理和容错机制**:在实际应用中,可能会遇到格式错误或无法解析的...
在实际开发中,为了提升用户体验,还可以考虑增加日期的格式化功能,将日期展示为用户习惯的格式,如"年-月-日"或"农历xx月xx日"。同时,考虑到不同用户的使用习惯,日期选择器的设计应该直观易用,可以采用日历视图...
通过`leapMonth`函数可以判断某一年是否为闰年,如果该年有闰月,则返回该闰月的编号(1-12),如果没有闰月则返回0。 #### 闰年天数计算 `leapDays`函数用于计算闰年的额外天数。如果存在闰月,则根据闰月是否有30...
总的来说,这个项目涉及到了JavaScript的日期处理,可能使用了第三方库或自定义算法来实现农历功能,同时利用AJAX技术和JSON格式进行前后端的数据交互。如果需要进一步了解或使用这些功能,你可以查看“mdate.js”的...
其算法基于公历规则:若年份能被4整除但不能被100整除,或者能被400整除,则该年为闰年。代码如下: ```javascript Date.prototype.isLeapYear = function() { return (0 === this.getYear() % 4 && ((this....
- **阳历**(Solardate):通常指公历,是国际上广泛使用的历法,以地球绕太阳公转一周为一年,每月平均为30.44天。 - **阴历**(Lunardate):主要根据月亮的阴晴圆缺变化来制定,一个月约为29.53天,一年通常为12...