永洪社区

标题: 根据日期,得到日期是一年的哪一周 [打印本页]

作者: yhdata_MS9LvT0s    时间: 2022-1-7 15:02
标题: 根据日期,得到日期是一年的哪一周
根据日期,得到日期是一年的哪一周,获得上一周的周数(年份的第一周是从星期一开始算第一周,比如20220103是星期一,2022年的第一周就从20220103开始)

作者: humming    时间: 2022-1-7 15:02
需要解决两个问题:
问题1:周的启示是周一还是周日, 这个由属性monday.first.day.of.week控制
问题2:1月1号不是周一需要处理。
     先通过weekNum拿到周数,如果周数>1, 看是不是要修正。
     通过 dateTrunc("year", now())拿到你的日期所在年的一月一号,now()换成你的date参数
     然后通过通过weekdayname()判断这个日期是不是“星期一”, 是的话不做修正,否则将周数减1


      
作者: _贝贝    时间: 2022-1-7 15:18
https://www.yonghongtech.com/hel ... m_highlightsub=week
作者: yhdata_MS9LvT0s    时间: 2022-1-7 15:44
永洪tech-Muse 发表于 2022-1-7 15:18
https://www.yonghongtech.com/help/Z-Suite/9.4/ch/scriptdatefunctions.html?zoom_highlightsub=week

但是需要返回的是日期是今年的第几周,不是返回星期几

作者: yhdata_MS9LvT0s    时间: 2022-1-7 16:01
永洪tech-Muse 发表于 2022-1-7 15:18
https://www.yonghongtech.com/help/Z-Suite/9.4/ch/scriptdatefunctions.html?zoom_highlightsub=week

比如说现在是2022-01-07,今年的第一周是从星期一开始算,那2022-01-07应该是今年的第一周

作者: _贝贝    时间: 2022-1-7 16:23
本帖最后由 永洪tech-Muse 于 2022-1-7 16:24 编辑

可以配置参数修改,如果配置monday.first.day.of.week=false,则日期组件的周起始日为周日,如果配置为true,则周起始日为周一。默认值是false。
控制周从周一开始还是从周日开始:默认值false从周日开始,true从周一开始;
例如日期表达式:天_周(DayofWeek),周_年(WeekofYear),年周(YearWeek);报表中日期组件等等。
文件系统在安装目录Yonghong/bihome/bi.properities配置文件中修改后重启;
数据库系统在管理系统--数据库空间--下载bi.properties修改后上传(不要改变文件名称还是bi.properties);
https://www.yonghongtech.com/hel ... highlightsub=monday

weekNum就是返回的周数呀
var a =date(2022,1,7);
var b = weekNum(a,2);
debug(weekNum(a))   
并且dayType传数字2代表一个星期的第一天为星期一,不填或其他表示一个星期的第一天为星期天。不能指定某个日期开始算第一周,只能指定从哪天开始算周一

作者: yhdata_MS9LvT0s    时间: 2022-1-7 16:30
永洪tech-Muse 发表于 2022-1-7 16:23
可以配置参数修改,如果配置monday.first.day.of.week=false,则日期组件的周起始日为周日,如果配置为true ...



修改了配置参数,只是修改了周的起始日期,比如今年的1,2号还是算第一周,能不能做到,20220101、20220102是星期六、星期天,所以算在了2021年的最后一周,20220103是星期一,所以2022年的第一周是从20220103开始,
作者: yhdata_KocafXH5    时间: 2022-1-7 16:37
使用sql中的函数weekofyear
作者: yhdata_MS9LvT0s    时间: 2022-1-7 16:49
yhdata_KocafXH5 发表于 2022-1-7 16:37
使用sql中的函数weekofyear

是在数据集里写好吗?

作者: humming    时间: 2022-1-8 16:50
或者通过另外的脚本实现思路:
var c = new java.util.GregorianCalendar();
c.setFirstDayOfWeek( java.util.Calendar.MONDAY);
c.setMinimalDaysInFirstWeek(7); // 这个是说第一周至少要多少天才算
c.setTime (now()); // 将now()替换成自己的日期参数
debug( c.get( java.util.Calendar.WEEK_OF_YEAR));
作者: yhdata_MS9LvT0s    时间: 2022-1-10 09:49
humming 发表于 2022-1-8 16:45
需要解决两个问题:
问题1:周的启示是周一还是周日, 这个由属性monday.first.day.of.week控制
问题2:1月 ...

好的,谢谢
作者: yhdata_KocafXH5    时间: 2022-1-11 11:15
yhdata_MS9LvT0s 发表于 2022-1-7 16:49
是在数据集里写好吗?

在sql语句里写
作者: yhdata_KocafXH5    时间: 2022-1-11 11:15
yhdata_MS9LvT0s 发表于 2022-1-7 16:49
是在数据集里写好吗?

是的,在数据集的sql语句里写,很容易实现




欢迎光临 永洪社区 (https://club.yonghongtech.com/) Powered by Discuz! X3.4