如何用Flux获取日历周、月、季度及年度起始时间的数据?
Flux 查询获取日历周期起始时间方案
一、日历周起始时间(自定义周起始)
Flux 原生的 date.truncate(t: now(), unit: 1w) 是从当前时间倒推7天,并非日历周(周一/周日)的起始。需要通过计算星期偏移量来获取准确的日历周起始:
场景1:以周一00:00为周起始
// 获取当前星期几(0=周日,1=周一,…6=周六) currentWeekDay = date.weekDay(t: now()) // 计算需回退的天数:周日回退6天,其他日期回退(当前星期数-1)天 daysToSubtract = if currentWeekDay == 0 then 6 else currentWeekDay - 1 // 将天数转为Duration类型 offsetDuration = duration(v: "${daysToSubtract}d") // 得到周一00:00的起始时间 weekStart = date.add(d: -offsetDuration, t: date.truncate(t: now(), unit: 1d)) // 应用到查询中 from(bucket: "your-bucket") |> range(start: weekStart, stop: now()) // 后续处理逻辑
场景2:以周日00:00为周起始
currentWeekDay = date.weekDay(t: now()) daysToSubtract = currentWeekDay offsetDuration = duration(v: "${daysToSubtract}d") weekStart = date.add(d: -offsetDuration, t: date.truncate(t: now(), unit: 1d)) from(bucket: "your-bucket") |> range(start: weekStart, stop: now())
二、日历月起始时间
直接用 date.truncate 结合 1mo 单位即可,会自动定位到当月1日00:00:00:
monthStart = date.truncate(t: now(), unit: 1mo) from(bucket: "your-bucket") |> range(start: monthStart, stop: now())
三、日历季度起始时间
两种实现方式:
方式1:直接用3个月截断
date.truncate 支持 3mo 单位,会自动定位到当前季度的第一天(如5月对应4月1日):
quarterStart = date.truncate(t: now(), unit: 3mo) from(bucket: "your-bucket") |> range(start: quarterStart, stop: now())
方式2:手动计算季度起始月
currentMonth = date.month(t: now()) // 匹配当前季度的起始月份 quarterStartMonth = if currentMonth <=3 then 1 else if currentMonth <=6 then 4 else if currentMonth <=9 then7 else10 // 构造季度起始时间 quarterStart = date.truncate(t: date.month(t: now(), month: quarterStartMonth), unit: 1mo) from(bucket: "your-bucket") |> range(start: quarterStart, stop: now())
四、日历年度起始时间
用 date.truncate 结合 1y 单位,定位到当年1月1日00:00:00:
yearStart = date.truncate(t: now(), unit: 1y) from(bucket: "your-bucket") |> range(start: yearStart, stop: now())
内容的提问来源于stack exchange,提问作者Ihor L.
相关产品推荐
相关产品推荐

