You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Logstash中从当前日期减去指定年日月计算得到历史日期?

Logstash Ruby Filter 日期偏移负值问题解决方案

问题原因

原有实现直接对年、月、日字段单独做减法,未处理日期跨月、跨年、大小月、闰年等边界场景的自动进位逻辑,因此会出现月份、日期为负值的问题。

解决方案

直接使用Ruby Date 类内置的日期偏移方法即可自动处理所有边界场景,无需手动拆分字段计算,修正后的配置如下:

ruby {
    code => '
        # 自定义要减去的年月日数值
        subtract_years = 25
        subtract_months = 10
        subtract_days = 10
        # 获取当前UTC日期对象
        current_date = Time.now.utc.to_date
        # 链式调用内置偏移方法,自动处理所有日期边界逻辑
        target_date = current_date.prev_year(subtract_years)
                             .prev_month(subtract_months)
                             .prev_day(subtract_days)
        # 格式化输出为标准时间格式,自动补全前导零
        event.set("[deleteTillDate]", target_date.strftime("%Y-%m-%d 00:00:00.000"))
    '
}

方案说明

  • 内置prev_year(n)、prev_month(n)、prev_day(n)方法会自动处理闰年、大小月、跨年跨月的进位逻辑,不会出现负值问题
  • 使用strftime方法格式化输出,避免手动拼接字符串时出现月份/日期为个位数时缺少前导零的格式问题
  • 你可以根据需求调整偏移的执行顺序,内置方法均会正确计算结果

内容的提问来源于stack exchange,提问作者Priyanka W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:39:02