使用脚本计算 WSO2 6.1.1 中传递日期的下一个日期
calculating next date to the passed Date in WSO2 6.1.1 using script
我正在尝试将日期的第二天设为已通过的日期。
正在从注册表文件中读取日期。
使用冒号分隔符拆分以上内容,并将其视为开始日期和结束日期。使用脚本调解器为两个日期添加日期的第二天。因为处理完成后,我需要使用下一天日期更新注册表。(此处尚未包含,仅包含日期转换)
<?xml version="1.0" encoding="UTF-8"?>
<api context="/testdateapi" name="TestAPI" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET">
<inSequence>
<log level="custom">
<property name="==TestDateAPI" value="called=="/>
</log>
<!-- <script language="js">
var log = mc.getServiceLog();
log.info("===Logging inside Script Mediator====");
var result=new Date('2020-12-03');
result.setDate(result.getDate() + 1);
log.info("modifiedDate::::" + result);
mc.setProperty("modifiedDate",result);
</script>
<respond/> -->
<property name="RegPath" scope="default" type="STRING" expression="get-property('registry','gov:/XeroConfig/PNLDT.txt')"/>
<script language="js"><![CDATA[var log = mc.getServiceLog();
log.info("Logging inside Script Mediator");
var dates = mc.getProperty("RegPath").split(":");
log.info("Reg Dates: " + dates);
var startDate = dates[0];
var endDate = dates[1];
var nextStartDate=addNextDay(startDate);
mc.setProperty("nextStartDate", nextStartDate);
//var nextEndDate=addNextDay(endDate);
// mc.setProperty("nextEndDate", nextEndDate);
log.info("startDate: " + startDate);
log.info("endDate: " + endDate);
function addNextDay(dateString) {
var simpleDateFormat = Packages.java.text.SimpleDateFormat;
var fomatter = new simpleDateFormat("yyyy-MM-dd");
var date = Packages.java.util.Date;
var currentDate = fomatter.format(new Date(dateString));
log.info("Current date : " + currentDate );
var calendar = Packages.java.util.Calendar.getInstance();
calendar.setTime(fomatter.parse(currentDate));
var daysToAdd = mc.getProperty("days");
calendar.add(Packages.java.util.Calendar.DATE, 1);
var destDate = fomatter.format(calendar.getTime());
log.info("Destination date : " + destDate );
return destDate;
}
]]></script>
<log level="custom">
<property expression="$ctx:nextStartDate" name="====nextStartDate==="/>
</log>
<respond/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>
日志:
[2020-12-04 10:35:18,197] [] INFO - LogMediator ==TestDateAPI = called==
[2020-12-04 10:35:18,202] [] INFO - ScriptMessageContext Logging inside Script Mediator
[2020-12-04 10:35:18,202] [] INFO - ScriptMessageContext Reg Dates: [Ljava.lang.String;@352bb9c2
[2020-12-04 10:35:18,213] [] INFO - ScriptMessageContext Current date : 1970-01-01
[2020-12-04 10:35:18,214] [] INFO - ScriptMessageContext Destination date : 1970-01-02
[2020-12-04 10:35:18,214] [] INFO - ScriptMessageContext startDate: 2020-12-01
[2020-12-04 10:35:18,214] [] INFO - ScriptMessageContext endDate: 2020-12-31
[2020-12-04 10:35:18,214] [] INFO - LogMediator ====nextStartDate=== = 1970-01-02
预期输出:
下一个开始日期:2020-12-02
下一个结束日期:2021-01-01
参考文献:
Date Conversion Link
您不需要调用 new Date(),因为您已经有了日期字符串并且您使用的日期对象是 javascript 对象。试用这段代码。日期在此处硬编码
<script language="js"><![CDATA[var log = mc.getServiceLog();
log.info("Logging inside Script Mediator");
var startDate = '2020-12-01';
var endDate = '2020-12-31';
var nextStartDate=addNextDay(startDate);
mc.setProperty("nextStartDate", nextStartDate);
var nextEndDate=addNextDay(endDate);
mc.setProperty("nextEndDate", nextEndDate);
log.info("startDate: " + startDate);
log.info("endDate: " + endDate);
function addNextDay(dateString) {
var simpleDateFormat = Packages.java.text.SimpleDateFormat;
var fomatter = new simpleDateFormat("yyyy-MM-dd");
var currentDate = dateString;
var calendar = Packages.java.util.Calendar.getInstance();
calendar.setTime(fomatter.parse(currentDate));
var daysToAdd = mc.getProperty("days");
calendar.add(Packages.java.util.Calendar.DATE, 1);
var destDate = fomatter.format(calendar.getTime());
log.info("Destination date : " + destDate );
return destDate;
}]]></script>
我正在尝试将日期的第二天设为已通过的日期。
正在从注册表文件中读取日期。
使用冒号分隔符拆分以上内容,并将其视为开始日期和结束日期。使用脚本调解器为两个日期添加日期的第二天。因为处理完成后,我需要使用下一天日期更新注册表。(此处尚未包含,仅包含日期转换)
<?xml version="1.0" encoding="UTF-8"?>
<api context="/testdateapi" name="TestAPI" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET">
<inSequence>
<log level="custom">
<property name="==TestDateAPI" value="called=="/>
</log>
<!-- <script language="js">
var log = mc.getServiceLog();
log.info("===Logging inside Script Mediator====");
var result=new Date('2020-12-03');
result.setDate(result.getDate() + 1);
log.info("modifiedDate::::" + result);
mc.setProperty("modifiedDate",result);
</script>
<respond/> -->
<property name="RegPath" scope="default" type="STRING" expression="get-property('registry','gov:/XeroConfig/PNLDT.txt')"/>
<script language="js"><![CDATA[var log = mc.getServiceLog();
log.info("Logging inside Script Mediator");
var dates = mc.getProperty("RegPath").split(":");
log.info("Reg Dates: " + dates);
var startDate = dates[0];
var endDate = dates[1];
var nextStartDate=addNextDay(startDate);
mc.setProperty("nextStartDate", nextStartDate);
//var nextEndDate=addNextDay(endDate);
// mc.setProperty("nextEndDate", nextEndDate);
log.info("startDate: " + startDate);
log.info("endDate: " + endDate);
function addNextDay(dateString) {
var simpleDateFormat = Packages.java.text.SimpleDateFormat;
var fomatter = new simpleDateFormat("yyyy-MM-dd");
var date = Packages.java.util.Date;
var currentDate = fomatter.format(new Date(dateString));
log.info("Current date : " + currentDate );
var calendar = Packages.java.util.Calendar.getInstance();
calendar.setTime(fomatter.parse(currentDate));
var daysToAdd = mc.getProperty("days");
calendar.add(Packages.java.util.Calendar.DATE, 1);
var destDate = fomatter.format(calendar.getTime());
log.info("Destination date : " + destDate );
return destDate;
}
]]></script>
<log level="custom">
<property expression="$ctx:nextStartDate" name="====nextStartDate==="/>
</log>
<respond/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>
日志:
[2020-12-04 10:35:18,197] [] INFO - LogMediator ==TestDateAPI = called==
[2020-12-04 10:35:18,202] [] INFO - ScriptMessageContext Logging inside Script Mediator
[2020-12-04 10:35:18,202] [] INFO - ScriptMessageContext Reg Dates: [Ljava.lang.String;@352bb9c2
[2020-12-04 10:35:18,213] [] INFO - ScriptMessageContext Current date : 1970-01-01
[2020-12-04 10:35:18,214] [] INFO - ScriptMessageContext Destination date : 1970-01-02
[2020-12-04 10:35:18,214] [] INFO - ScriptMessageContext startDate: 2020-12-01
[2020-12-04 10:35:18,214] [] INFO - ScriptMessageContext endDate: 2020-12-31
[2020-12-04 10:35:18,214] [] INFO - LogMediator ====nextStartDate=== = 1970-01-02
预期输出:
下一个开始日期:2020-12-02 下一个结束日期:2021-01-01
参考文献: Date Conversion Link
您不需要调用 new Date(),因为您已经有了日期字符串并且您使用的日期对象是 javascript 对象。试用这段代码。日期在此处硬编码
<script language="js"><![CDATA[var log = mc.getServiceLog();
log.info("Logging inside Script Mediator");
var startDate = '2020-12-01';
var endDate = '2020-12-31';
var nextStartDate=addNextDay(startDate);
mc.setProperty("nextStartDate", nextStartDate);
var nextEndDate=addNextDay(endDate);
mc.setProperty("nextEndDate", nextEndDate);
log.info("startDate: " + startDate);
log.info("endDate: " + endDate);
function addNextDay(dateString) {
var simpleDateFormat = Packages.java.text.SimpleDateFormat;
var fomatter = new simpleDateFormat("yyyy-MM-dd");
var currentDate = dateString;
var calendar = Packages.java.util.Calendar.getInstance();
calendar.setTime(fomatter.parse(currentDate));
var daysToAdd = mc.getProperty("days");
calendar.add(Packages.java.util.Calendar.DATE, 1);
var destDate = fomatter.format(calendar.getTime());
log.info("Destination date : " + destDate );
return destDate;
}]]></script>