最近我在CRM中做了一个日报,周报和月报的功能,于是对PHP时间的处理总结了一些门道,以后一一道来,今天先写一篇关于,记得以前写过一篇关于使用Javascript计算当前日期的周数的文章,里面写过一个方法用于计算和PHP中date('W')等同的周数,如今看来是不对的,如何不对,那就要讲到周数的计算方式了。
周数的计算一般分为两种:一种是简单直观的定义,就是以当年的1月1日为第一周,周一为一周的开始,7天为一轮。如果使用这种方式那我上一篇的算法没有什么问题。
另一种是ISO-8601对于周数的定义,原文如下:
In [ISO8601], the week number is defined by:
- weeks start on a monday
- week 1 of a given year is the one that includes the first Thursday of that year. (or, equivalently, week 1 is the week that includes 4 January.)
简单的说就是一周以周一开始,第一周是包括当年包含周四的那一周,举个例子:2005-01-01是周六,它的周数就是2004年的第53周,而不是2005年第一周。同理 2007年12月31日 周数应该是2008年第一周。是不是有点复杂。正所谓看山不是山,看水不是水,看日期的年份好像是这一年,可是算周数可能以上年或下一年的来。
所以要解决这个问题就必须先做两件事: 1. 算出日期对应的周年份 2.周年份的第一周周一的日期。
不废话,直接贴代码:
function getISOYearWeek(date){
var commericalyear=getCommerialYear(date);
var date2=getYearFirstWeekDate(commericalyear);
var day1=date.getDay();
if(day1==0) day1=7;
var day2=date2.getDay();
if(day2==0) day2=7;
var d = Math.round((date.getTime() - date2.getTime()+(day2-day1)*(24*60*60*1000)) / 86400000);
return Math.ceil(d / 7)+1;
}
function getYearFirstWeekDate(commericalyear){
var yearfirstdaydate=new Date(commericalyear, 0, 1);
var daynum=yearfirstdaydate.getDay();
var monthday=yearfirstdaydate.getDate();
if(daynum==0) daynum=7;
if(daynum<=4){
return new Date(yearfirstdaydate.getFullYear(),yearfirstdaydate.getMonth(),monthday+1-daynum);
}else{
return new Date(yearfirstdaydate.getFullYear(),yearfirstdaydate.getMonth(),monthday+8-daynum)
}
}
function getCommerialYear(date){
var daynum=date.getDay();
var monthday=date.getDate();
if(daynum==0) daynum=7;
var thisthurdaydate=new Date(date.getFullYear(),date.getMonth(),monthday+4-daynum);
return thisthurdaydate.getFullYear();
}
//2008-12-24 是第几周 返回 52
var date =new Date(2008,11,24);
alert(getISOYearWeek(date));
//2008-12-30 是第几周 返回 1
var date =new Date(2008,11,30);
alert(getISOYearWeek(date));
关于更多的PHP和Javascript关于日期的操作,日后我将继续总结,敬请关注!
分享到:
相关推荐
这可以通过计算两个日期的差值(可以使用编程语言中的日期函数,如Python的`dateutil.relativedelta`或JavaScript的`Date`对象)得到。 - 接下来,将这个天数差除以7得到商S(周数)和余数X。商S代表完整的周数,...
### JavaScript 计算两个日期相差几周的知识点详解 ...通过以上介绍,我们可以看到使用JavaScript计算两个日期相差几周不仅实用而且具有一定的灵活性。希望本文能够帮助你在项目中更好地理解和应用日期处理技术。
`getNextDate` 函数则是另一个核心函数,用于根据当前日期和希望得到的星期几来计算新的日期。它首先将提供的星期几与当前日期的星期几进行比较,然后根据差值调整时间,最后返回计算后的新日期对象。 最后,提供的...
然后`formatDate`函数获取了当前日期的年、月、日、时、分、秒,并利用`formatTen`函数将它们格式化为字符串返回。 ### 2. 修改日期 在JavaScript中,我们可以通过`setDate`方法来修改日期。文件中的示例展示了...
这里我们首先获取当年的第一天`date2`,再计算当前日期`date1`距离年初的天数差`d`。之后,我们考虑年初的第一天是一周中的哪一天,加上1(因为`getDay()`返回的是0-6,但我们要的是1-7)。最后,将`d`加上年初周差...
通过Date对象的`getDate()`方法获取当前日期的日份,并通过`setDate()`方法结合一个计算得到的新日份来设置新的日期对象,从而实现日期的增加或减少。 4. **格式化日期**: 为了方便显示或存储,通常需要将日期...
3. **获取当前日期和计算周数**: 在JavaScript中,可以使用`Date`对象来获取当前日期。例如,`new Date()`会返回一个表示当前时间的`Date`实例。之后,开发者可能通过计算日期对象的月份和日来确定当前处于哪一周。...
在计算当前日期是本月份或本年的第几周时,使用此函数可以确保得到的是最接近的整数周数。 6. 实际操作的示例代码:文档中给出了一段示例代码,通过定义getMonthWeek和getYearWeek两个函数,并实例化当前日期,最终...
在JavaScript中,获取当前日期是本年的第几周以及本周的起始日期是一个常见的需求,特别是在日历应用或者数据分析中。下面将详细解释如何通过JS实现这个功能,并且考虑到周的起始日期可以自定义,这里设定为礼拜四...
以上就是实现简易日历并获取指定日期周数及星期几的基本知识点了。在编写过程中,需要注意数据类型转换、边界条件的处理、以及可能的逻辑错误等。通过不断调试和对不同输入的测试,最终可以完成一个功能完善的日历...
本文详细介绍了如何使用JavaScript实现日期的上下周切换功能,包括如何获取当前日期、计算每月和每年的周数,以及如何实现前后一周的日期切换。这些技术对于构建涉及日期操作的应用程序非常有用,尤其是那些需要显示...
- `getFullYear()`、`getWeek()`和`getDay()`方法:获取日期对象的年份、当前日期所在的当年第几周以及一周中的星期几(0表示周日,1表示周一,以此类推)。 3. **自定义逻辑**: - 计算日期:首先确定一年的第一...
在提供的示例代码中,定义了一个名为`initSearchMajorChanges`的函数,这个函数使用了moment.js库来实现获取当前日期所在年份的周数,并尝试向前和向后推进指定的周数。下面,我们将逐步解释这段代码的功能和逻辑。 ...
- **获取当前日期**:JavaScript的`Date`对象能帮助我们获取当前的年、月、日以及星期几。通过`getFullYear()`、`getMonth()`(注意月份是从0开始的)、`getDate()`和`getDay()`方法,我们可以得到所需的信息。 - ...
本文将深入探讨如何在JavaScript中对当前日期进行加减操作,包括增加天数、周数、月数和年数。以下是对给定代码的详细解释及扩展: 首先,创建一个`Date`对象来表示当前日期和时间: ```javascript var myDate = ...
这些库提供了丰富的函数,如获取当前日期、添加或减去天数、判断日期是否在某个范围内等。 日期算法的核心部分是计算两个日期之间的差值,这可以是天数、周数、月份或年份。这种计算需要考虑闰年规则,因为闰年有...
为了得到ISO周数,需要对日期进行一些计算,包括确定当前日期在当年的位置,以及该位置属于哪一周。 2. **虚拟DOM**:Deku的核心在于虚拟DOM的管理。当状态变化时,Deku会计算出最小的DOM更新操作,从而提高性能。 ...
安装`dayjs/plugin/weekOfYear`插件,可以获取当前日期所在的年份中的周数。 在实际项目中,可以将Day.js用于处理用户输入的时间戳转换、计算两个日期之间的差距、格式化日期显示等场景。同时,由于Day.js的体积小...
- `Date.prototype.WeekNumOfYear`:确定日期所在的年度周数。 - `StringToDate`:将字符串转换为日期对象。 - `IsValidDate`:验证日期是否有效。 - `CheckDateTime`:检查完整日期时间的正确性。 - `daysBetween`...