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

如何通过JIRA REST API获取指定月份的工作日志?

通过JIRA REST API获取指定月份工作日志的正确方法

你之前用GET /rest/api/3/worklog/updated加since参数不行,是因为这个接口的since是筛选工作日志被更新的时间,不是日志记录的开始时间,逻辑完全不对。要获取指定月份的工作日志,应该用JQL结合搜索接口来实现,以下是具体步骤和代码示例:

核心思路

  1. 用JQL筛选出工作日志开始时间落在目标月份的所有issue
  2. 调用搜索接口时扩展worklog字段,同时指定需要的issue字段(key、summary)
  3. 遍历返回结果,提取每个符合时间范围的工作日志的目标字段

具体实现(Google App Script)

步骤1:准备JQL语句

根据目标月份构造时间范围,注意时区要和你的JIRA实例一致(比如东八区用+0800):

# 示例:2024年5月的时间范围(精确到时分秒)
worklogStarted >= "2024-05-01T00:00:00.000+0800" AND worklogStarted <= "2024-05-31T23:59:59.999+0800"

如果只需要日期匹配(不精确到时间),也可以用worklogDate字段:

worklogDate >= "2024-05-01" AND worklogDate <= "2024-05-31"

步骤2:Google App Script代码

function getJiraMonthlyWorklogs() {
  // 替换成你的JIRA信息
  const jiraDomain = "your-jira-domain"; // 例如 "company.atlassian.net"
  const username = "your-email@domain.com";
  const apiToken = "your-atlassian-api-token"; // 在Atlassian账户设置生成

  // 替换成目标月份的时间范围
  const targetStart = "2024-05-01T00:00:00.000+0800";
  const targetEnd = "2024-05-31T23:59:59.999+0800";

  // 构造请求URL
  const jql = `worklogStarted >= "${targetStart}" AND worklogStarted <= "${targetEnd}"`;
  const requestUrl = `https://${jiraDomain}/rest/api/3/search?jql=${encodeURIComponent(jql)}&fields=key,summary&expand=worklog`;

  // 请求配置
  const requestOptions = {
    method: "GET",
    headers: {
      "Authorization": "Basic " + Utilities.base64Encode(`${username}:${apiToken}`),
      "Accept": "application/json"
    }
  };

  try {
    // 发送请求并解析响应
    const response = UrlFetchApp.fetch(requestUrl, requestOptions);
    const responseData = JSON.parse(response.getContentText());
    const worklogResults = [];

    // 遍历每个issue,提取符合条件的工作日志
    responseData.issues.forEach(issue => {
      issue.fields.worklog.worklogs.forEach(worklog => {
        const logStart = new Date(worklog.started);
        // 二次校验时间范围(避免JQL返回包含其他时间日志的issue)
        if (logStart >= new Date(targetStart) && logStart <= new Date(targetEnd)) {
          worklogResults.push({
            issueKey: issue.key,
            summary: issue.fields.summary,
            timeSpent: worklog.timeSpent,
            startDateTime: worklog.started,
            comments: worklog.comment ? worklog.comment.body : ""
          });
        }
      });
    });

    // 输出结果到控制台,或写入Google Sheet
    console.log("获取到的工作日志:", worklogResults);
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    // 写入表头
    sheet.getRange(1, 1, 1, 5).setValues([["IssueKey", "Summary", "TimeSpent", "StartDateTime", "Comments"]]);
    // 写入数据
    sheet.getRange(2, 1, worklogResults.length, 5).setValues(
      worklogResults.map(item => [item.issueKey, item.summary, item.timeSpent, item.startDateTime, item.comments])
    );
  } catch (error) {
    console.error("请求失败:", error.message);
  }
}

注意事项

  • 分页处理:如果结果超过默认的50条,需要循环调用接口,每次递增startAt参数(比如startAt=50、startAt=100),直到total字段等于已获取的条目数
  • 权限验证:确保你的JIRA账户有访问目标issue和工作日志的权限,API token需要在Atlassian账户的安全设置中生成
  • 评论格式:如果工作日志的评论是富文本格式,worklog.comment.body会包含HTML标签,需要的话可以用正则替换掉标签提取纯文本
  • 时区一致性:JQL中的时间时区必须和JIRA实例的时区一致,否则会出现筛选偏差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:42:05