如何在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
相关产品推荐
相关产品推荐

