Mule 基于输入日期创建日期数组

Mule 基于输入日期创建日期数组,mule,dataweave,mule4,Mule,Dataweave,Mule4,我有一个JSON负载,如下所示: { "start_date": "20210314", "end_date": "20210613" } 我希望以这样的方式获取数组,它包含: [ { "start_date": "20210314", "end_date": "20210404" }, {

我有一个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
]
开始日期结束日期已以日期格式强制执行。 每个对象的日期间隔为21天 我正在mule 4中创建一个REST API,使用和数学运算符应该可以得到所需的结果

输入

{
    "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"
  }
]
脚本

{
    "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"
  }
]
使用和数学运算符应该可以得到所需的结果

输入

{
    "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"
  }
]
脚本

{
    "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"
  }
]

谢谢你的帮助,成功了!!!谢谢你的帮助,成功了!!!