每 6 个月列出一次

List Every 6 Months Between Dates

提问人:Fueled By Coffee 提问时间:10/24/2023 最后编辑:Fueled By Coffee 更新时间:10/25/2023 访问量:109

问:

我有一个函数,可以使用“直到”列出开始日期和结束日期之间的日期

我正在尝试找到一些东西(可能使用“xbar”),它将从开始日期开始以 6 个月的间隔列出每个日期

例如。2021.02.15、2021.07.15、2022.02.15等

我集成了 Q.addmonths[],但似乎无法将它们放在一起

KDB Q

评论


答:

2赞 cillianreilly 10/24/2023 #1

这样的事情对你有用吗?

q){(-1+`dd$x)+`date$(`month$x)+y*til z}[2021.02.15;6;4]
2021.02.15 2021.08.15 2022.02.15 2022.08.15

它以参数给定的时间间隔生成参数指定的月数。 是您的开始日期。zyx

`month$x - pulls out the month of your date
`dd$x - pulls out the day of the month

您也可以像您提到的那样使用(相同的参数):.Q.addmonths

q){.Q.addmonths[x;y*til z]}[2021.02.15;6;4]
2021.02.15 2021.08.15 2022.02.15 2022.08.15

对于这两种解决方案,请记住 https://code.kx.com/q/ref/dotq/#addmonths 文档中的警告:

If the date x is near the end of the month and (x.month + y)’s month has fewer days than x.month, the result may spill over to the following month.

评论

0赞 Fueled By Coffee 10/24/2023
宾果游戏!我大概可以走完剩下的路。我将尝试将“z”重新设计为x和y之间的6个月周期数,而不是“z”作为字面意思,以便它可以在任何结束日期终止
1赞 terrylynch 10/25/2023 #2

这种方法将继续增加 6 个月,直到达到结束日期

q){(-1_(y>).Q.addmonths[;6]\x),y}[2021.02.15;2022.02.15]
2021.02.15 2021.08.15 2022.02.15