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

如何在GitHub Actions作业步骤中计算时间差?

在GitHub Actions中计算PR创建时间与当前时间的小时差

你原来的代码尝试用JavaScript语法直接计算,但GitHub Actions的run步骤默认执行shell脚本(bash),所以得用shell的日期处理工具来实现。以下是可行的解决方案:

完整示例代码

jobs:
  pr-comment:
    runs-on: [self-hosted]
    steps:
      - name: 计算PR创建时间与当前时间的小时差
        id: diff_hours
        run: |
          # 将PR创建时间(ISO 8601格式)转换为Unix时间戳(秒)
          PR_CREATED_AT=$(date -d "${{ github.event.pull_request.created_at }}" +%s)
          # 获取当前时间的Unix时间戳
          CURRENT_TIME=$(date +%s)
          # 计算时间差(小时),取整数部分
          DIFF_HOURS=$(( (CURRENT_TIME - PR_CREATED_AT) / 3600 ))
          # 将结果输出到GitHub Actions的输出变量中
          echo "hours=$DIFF_HOURS" >> $GITHUB_OUTPUT

      - name: 当差值超过24小时时执行操作
        if: ${{ fromJSON(steps.diff_hours.outputs.hours) > 24 }}
        run: |
          echo "PR创建时间已超过24小时"
          # 这里写你需要执行的逻辑

关键说明

  • 时间格式转换:github.event.pull_request.created_at返回的是ISO 8601标准格式的时间(如2024-05-20T14:30:00Z),通过date -d参数可以直接将其转换为Unix时间戳。
  • 时间差计算:Unix时间戳以秒为单位,差值除以3600即可得到小时数,用$(( ... ))进行整数运算。
  • 条件判断:由于GitHub Actions的输出变量默认是字符串类型,用fromJSON()将其转换为数字后再进行比较,避免字符串比较导致的逻辑错误。

针对BSD系统(如macOS runner)的适配

如果你的self-hosted runner是macOS系统,BSD版本的date命令语法不同,需要调整时间转换命令:

PR_CREATED_AT=$(date -j -f "%Y-%m-%dT%H:%M:%SZ" "${{ github.event.pull_request.created_at }}" +%s)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:58:23