如何获取过去6个完整自然月的Xero损益报表数据?
解决Xero API获取过去6个完整自然月损益报表的问题
问题回顾
要获取过去6个完整自然月的损益报表(Profit and Loss),直接用以下请求会附带当前月累计(MTD)数据:
GET https://api.xero.com/api.xro/2.0/Reports/ProfitAndLoss?periods=6&timeframe=MONTH
而添加fromDate和toDate参数(以当前12月,目标最后完整月为11月为例),会导致所有月份被强制限制为30天左右,无法获取真实自然月数据:
GET https://api.xero.com/api.xro/2.0/Reports/ProfitAndLoss?periods=5&timeframe=MONTH&toDate=2024-11-30&fromDate=2024-11-01
错误原因
- 单独使用
periods=6&timeframe=MONTH:API默认从当前日期向前推算周期,当前未结束的月份会被纳入,产生MTD数据。 - 同时指定
fromDate和toDate(且范围为单个月):API会强制将每个period的时长对齐为fromDate到toDate的间隔,导致所有月份被截断为相同天数,而非自然月。
正确解决方案
使用dateRangeType=Custom指定完整的6个自然月时间范围,同时保留timeframe=MONTH和periods=6参数,让API自动拆分出完整自然月:
示例请求(当前为2024年12月,目标6个完整月为2024-06至2024-11)
GET https://api.xero.com/api.xro/2.0/Reports/ProfitAndLoss?dateRangeType=Custom&fromDate=2024-06-01&toDate=2024-11-30&timeframe=MONTH&periods=6
关键说明
- 日期范围计算:
fromDate设为第6个完整月的第一天,toDate设为最近一个完整月的最后一天(比如当前是1月,最近完整月是去年12月,fromDate就是去年7月1日,toDate是去年12月31日)。 - 参数组合:必须明确设置
dateRangeType=Custom,同时搭配timeframe=MONTH和periods=6,API会自动将指定时间范围拆分为6个连续的完整自然月,不会截断月份天数。 - 返回验证:返回的
Cells数组会显示每个自然月的最后一天(如30 Jun 24、31 Jul 24等),对应真实的完整自然月数据。
内容的提问来源于stack exchange,提问作者Mike Thrussell
相关产品推荐
相关产品推荐

