Dataweave:经过的天数和当月剩余的天数

问题描述 投票:0回答:2

我能够获得当月过去的日子。但是不知道如何获得当前月份的剩余天数。

例如,本月(6月)的天数= 7,剩余的天数= 23

%dw 2.0
output application/json
---
{
    "daysPassed" : now().day -1,
    "daysLeft" : ""
}
dataweave mulesoft mule-esb
2个回答
3
投票

DataWeave似乎没有内置函数来计算月末,因此我使用一些日期算法进行计算。

%dw 2.0
output application/json
fun daysLeftOnMonth(d) = do {
    var nextMonthDate = d as Date + |P1M|
    var endOfMonth= ( nextMonthDate  - ( ("P$(nextMonthDate.day as String)D" as Period) )).day
    ---
    endOfMonth - d.day + 1 
}
---
{
    "daysPassed" : now().day - 1,
    "daysLeft" : daysLeftOnMonth(now())
}

为了更详细地解释,首先我将一个月添加到当前日期:

var nextMonthDate = d as Date + |P1M|

然后我去了月初,少于一天,所以我得到了本月的最后一天:

nextMonthDate  - (("P$(nextMonthDate.day as String)D" as Period)

诀窍是如何在DataWeave中保留动态时间段。我必须搜索它。您必须将句点构造为字符串,然后将其强制为句点。

然后我将减去的天数减去一个月的最后一天的天数。


2
投票

与此类似,您可以始终在其中建立the年检查。

%dw 2.0
output application/json
var thirtyDayMonths = [4,6,8,10]
---
{
    "daysPassed" : now().day -1,
    "daysLeft" : if (thirtyDayMonths contains now().month) 
                         (30-now().day) 
                 else if (now().month == 2) 
                         (28-now().month) 
                 else (31-now().month)
}
© www.soinside.com 2019 - 2024. All rights reserved.