微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据输入日期创建一个日期数组

如何解决根据输入日期创建一个日期数组

我有一个 JSON 有效负载

{
    "start_date": "20210314","end_date": "20210613"
}

我想以包含的方式获取数组:

[
  {
    "start_date": "20210314","end_date": "20210404"
  },{
     "start_date": "20210405","end_date": "20210426"
  },{
     "start_date": "20210427","end_date": "20210518"
  }.... till the end date in JSON payload
]

start_dateend_date 已经被强制转换为 date 格式。 每个对象的日期间隔为 21 天 我正在 mule 4 中创建一个 REST API。

解决方法

使用 Period 和数学运算符应该可以得到想要的结果。

输入

{
    "start_date": "20210314","end_date": "20210824"
}

脚本

%dw 2.0
output application/json
var days=(payload.end_date as Date {"format": "uuuuMMdd"} - payload.start_date as Date {"format": "uuuuMMdd"}) as Number {"unit": "days"}
---
1 to ceil(days/21) map {
    start_date:if(($$)==0)(payload.start_date) else (payload.start_date as Date {"format": "uuuuMMdd"} + (("P"++(21*($$)+($$))++"D") as Period )) as Date {"format": "uuuuMMdd"},end_date: if(($$)==0)((payload.start_date as Date {"format": "uuuuMMdd"} + |P21D|) as Date {"format": "uuuuMMdd"}) 
   
     else if (((payload.end_date as Date {"format": "uuuuMMdd"}) -((payload.start_date as Date {"format": "uuuuMMdd"} + (("P"++(21*($$) +21+($$))++"D") as Period )) as Date {"format": "uuuuMMdd"})) as Number {"unit" : "days"} < 0) payload.end_date
    
    else (payload.start_date as Date {"format": "uuuuMMdd"} + (("P"++(21*($$) +21+ ($$))++"D") as Period )) as Date {"format": "uuuuMMdd"}
}

输出

[
  {
    "start_date": "20210314","end_date": "20210404"
  },{
    "start_date": "20210405","end_date": "20210426"
  },{
    "start_date": "20210427","end_date": "20210518"
  },{
    "start_date": "20210519","end_date": "20210609"
  },{
    "start_date": "20210610","end_date": "20210701"
  },{
    "start_date": "20210702","end_date": "20210723"
  },{
    "start_date": "20210724","end_date": "20210814"
  },{
    "start_date": "20210815","end_date": "20210824"
  }
]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。