最近在用sharepoint 2010 做一个叫:工作安排的功能。所有数据存放在一个自定义列表里,里面有个开始时间栏。用户要查看开始时间所在周的下一周的数据。比如,开始时间是2011-11-03,那么用户要查看2011-11-07~2011-11-13内的数据。
在这个过程遇到的一个最大的问题是怎么根据开始时间计算出开始时间所在周下周周一的日期。为这个问题纠结了好几天,不过在网友的帮助下终于解决了。
(注意,下面的内容并不能满足我的需求,但是它的思路非常好,让我有了启发)
1.获取指定日期所在周周一的日期。在自定义列表里添加一个计算栏叫:WeekStart。把下面的formula表达式写到公式里:
=IF(TEXT(WEEKDAY(开始时间),"ddd")="周一",开始时间,IF(TEXT(WEEKDAY(开始时间-1),"ddd")="周一",开始时间-1,IF(TEXT(WEEKDAY(开始时间-2),"ddd")="周一",开始时间-2,IF(TEXT(WEEKDAY(开始时间-3),"ddd")="周一",开始时间-3,IF(TEXT(WEEKDAY(开始时间-4),"ddd")="周一",开始时间-4,IF(TEXT(WEEKDAY(开始时间-5),"ddd")="周一",开始时间-5,开始时间-6))))))
注意:1.上面的公式应该在一行。2.你可以根据自己的需要将开始时间改成你需要的栏名,比如创建时间。3.如果你用的SharePoint 是英文版,请把周一改成:Mon。3.返回类型要选择日期和时间
上面公式的计算结果示例:
如果开始时间是:2011/11/22 17:11 WeekSart的值是:2011/11/21 。
扩展:
如果我们要获得开始时间所在周的周日的日期公式又是怎么样呢?新建一个计算栏WeekEnd,公式如下:
=IF(TEXT(WEEKDAY([开始时间]),"ddd")="周日",[开始时间],IF(TEXT(WEEKDAY([开始时间]+1),"ddd")="周日",[开始时间]+1,IF(TEXT(WEEKDAY([开始时间]+2),"ddd")="周日",[开始时间]+2,IF(TEXT(WEEKDAY([开始时间]+3),"ddd")="周日",[开始时间]+3,IF(TEXT(WEEKDAY([开始时间]+4),"ddd")="周日",[开始时间]+4,IF(TEXT(WEEKDAY([开始时间]+5),"ddd")="周日",[开始时间]+5,[开始时间]+6))))))
注意:和WeekStart一样,注意公式内容的调整。
上面公式的计算结果示例:
如果开始时间是:2011/11/22 17:11 WeekSart的值是:2011/11/27 。
注意,如果你的sp是中文版,请把公式中的Today换成今日。
说明:以上内容基于,这篇文章收集整理。
老外这篇文章写的我有点糊涂,他计算获取上下周数据的公式,也有点奇怪,所以具体公式我没有引用,如果需要请看英文原版。不管怎么样,老外公式的思想很有参考价值。这里要特别感谢我的那位网友。
另外,获取指定日期所在周周一的日期其实有更简单的公式:=日期-(WEEKDAY(日期))+2
参考:
经测试:老外的两个Formula公式获取的是指定日期所在周的周一和周日的日期。如下图,我是根据开始时间计算的。
另外,关于获取上周,本周及下周的数据的公式,也不对。除了获取本周的可行外,其他都不行,比如获取上周的数据,会把上周,上上周。。。的所有数据都获取到。
有问题欢迎留言。