获取当前日期是今年的第几周

在网上看了很多帖子,获取当前日期是今年的第几周,逻辑大概就是简单的获取今天是今年的第几天,然后除以7,取整作为今年的第几周周数,实际应用中的业务逻辑经常不会这么简单。

先说下思路,有了思路,编程就不再限制在单个语言,每种语言都可以实现:
首先明确业务规则,规定当年的1月1日即使不是周一,所在周也算作当年的第一周。
以LotusScript举例,
1、获取当年的1月1日是周几:
周日使用Weekday()方法返回1,设定每周一作为每周的第一天,周一使用Weekday()方法返回2。
2、获取当天距下周一相差几天:
①当周六使用Weekday()方法返回7,与下周一相差2天,7+2=9
②同理可以试出,周一到周五都符合以上的条件,使用9 - 周一到周六使用Weekday,获取与下周一差值都符合条件
③周日使用Weekday返回1,9-1返回8,实际与下周一差1天,不符合条件,所以例外判断
3、当前时间与元旦后第一个周一相差几周:
获取当前时间与元旦后第一个周一0点的时间差毫秒,246060=86400为1天时间,使用时间差毫秒/(86400*7),取整数,计算当前时间距离 元旦后第二周周一 一共多少周,定为n
4、获取当前日期是今年的第几周:
例如:元旦后第一个周一,如果时间为当周的周日23点59分59秒,由以上计算得出大概为0.99周,取整为0,所以要n+1,然后再加上元旦后到第一个周一之间的一周,再n+1,一共为n+2

由此,思路全部完成,可以编程了。

LotusScript中,使用 Weekday() 方法可以获取当前日期是周几,周日作为每周的开始,从周日到周六,分别返回1、2、3、4、5、6、7。

Dim newyearweek As Integer
Dim adjustd As Integer
Dim week As Integer
Dim sweek As String
Dim dateTime As New NotesDateTime( CStr(Year(Now))+"-01-01 00:00:00" )	'获取元旦0点的时间
Dim dateTimeNow As New NotesDateTime( Now )												'获取当前时间
newyearweek = Weekday(CDat(CStr(Year(Now))+"-01-01"))
If newyearweek = 1 Then
	adjustd = 1
Else
	adjustd = 9 - newyearweek
End If
Call dateTime.AdjustDay( adjustd )		'获取元旦后第一个周一0点的时间
week = Int(dateTimeNow .TimeDifferenceDouble(  dateTime  ) / (86400 * 7)) + 2
If week < 10 Then
	sweek = "0" + CStr(week)
Else
	sweek = CStr(week)
End If
Msgbox sweek

Domino公式中,使用 @Weekday 方法可以获取当前日期是周几,周日作为每周的开始,从周日到周六,分别返回1、2、3、4、5、6、7。

d:=@Time(@Year(@Now);1;1;0;0;0);
dd:=@If(@Weekday(d)=1;@Adjust(d;0;0;1;0;0;0);@Adjust(d;0;0;9-@Weekday(d);0;0;0));
w:=2+ @Integer((@Now-dd)/(24*60*60*7));
@If(w<10;"0"+w;w)

JavaScript中,使用 getDay() 方法可以获取当前日期是周几,从周日到周六,分别返回0、1、2、3、4、5、6,月份也是从0开始到11结束。

var dateTimeNow = new Date();
var year = dateTimeNow.getFullYear();
var dateTime = new Date(year,"0","1","0","0","0");
var adjustd;
if(dateTime.getDay() == 0){
    adjustd = 1;
}else{
    adjustd = 8 - dateTime.getDay();
}
dateTime = dateTime.setDate(dateTime.getDate() + adjustd);  //获取元旦后第一个周一0点的时间
dateTime = new Date(dateTime);
dateTimeNow = dateTimeNow.setDate(dateTimeNow.getDate());
//毫秒,所以要多除1000
var sweek = parseInt((dateTimeNow - dateTime) / 1000 / (86400 * 7)) + 2;
if(sweek < 10){
    sweek = "0" + sweek;
}
console.log(sweek);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值