网上搜到的都是类似如下这种:

// 获取当前时间
var date= new Date();

// 格式化输出当前时间
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();

var formattedDate = year + "-" + 
                    ( month  + 1 ) + "-" + 
                    day + " " + 
                    hour + ":" + 
                    minute  + ":" + 
                    second ;

console.log(formattedDate); // 输出:yyyy-MM-dd HH:mm:ss

将其写入到 jetlinks 规则编排函数节点中:

var ctx = context;


handler.onMessage(function(ruleData){
    var reportTime = getReportTime();

    ctx.getLogger().warn("当前系统时间:");
    ctx.getLogger().warn(reportTime );

    return ruleData.data
})

function getReportTime(){
    // 获取当前时间
    var date = new Date();

    // 格式化输出当前时间
    var year = date.getFullYear();
    var month = date.getMonth();
    var day = date.getDate();
    var hour = date.getHours();
    var minute = date.getMinutes();
    var second = date.getSeconds();

    var reportTime = year + "-" + 
                        ( month  + 1 ) + "-" + 
                        day + " " + 
                        hour + ":" + 
                        minute  + ":" + 
                        second ;

    return reportTime;

}

运行报错:

java.lang.UnsupportedOperationException: can not cast to number:-
	at org.jetlinks.reactor.ql.utils.CastUtils.castNumber(CastUtils.java:160)
	Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below: 
Assembly trace from producer [reactor.core.publisher.FluxDefer] :
	reactor.core.publisher.Flux.defer
	org.jetlinks.pro.rule.engine.executor.ScriptTaskExecutorProvider.lambda$createExecutor$8(ScriptTaskExecutorProvider.java:77)
Error has been observed at the following site(s):
	*_______Flux.defer ⇢ at org.jetlinks.pro.rule.engine.executor.ScriptTaskExecutorProvider.lambda$createExecutor$8(ScriptTaskExecutorProvider.java:77)
	|_ Flux.mapNotNull ⇢ at org.jetlinks.pro.rule.engine.executor.ScriptTaskExecutorProvider.lambda$createExecutor$8(ScriptTaskExecutorProvider.java:95)...

输出如下几个变量的类型:

var ctx = context;


handler.onMessage(function(ruleData){
    var reportTime = getReportTime();

    ctx.getLogger().warn("当前系统时间:");
    ctx.getLogger().warn(reportTime );

    return ruleData.data
})

function getReportTime(){
    // 获取当前时间
    var date = new Date();

    // 格式化输出当前时间
    var year = date.getFullYear();
    var month = date.getMonth();
    var day = date.getDate();
    var hour = date.getHours();
    var minute = date.getMinutes();
    var second = date.getSeconds();

    ctx.getLogger().warn( typeof year );
    ctx.getLogger().warn( typeof month );
    ctx.getLogger().warn( typeof day );
    ctx.getLogger().warn( typeof hour );
    ctx.getLogger().warn( typeof minute );
    ctx.getLogger().warn( typeof second );

    var reportTime = year + "-" + 
                        ( month  + 1 ) + "-" + 
                        day + " " + 
                        hour + ":" + 
                        minute  + ":" + 
                        second;

    return reportTime;

}

发现都是 number 类型:

jetlinks 规则编排中的函数节点使用 js 脚本格式化输出当前系统时间的坑-LMLPHP

怀疑是这里的语法要比 浏览器中的 javascript 语法要严格一些,数字类型不能和字符串类型直接相加,需要先转成字符串,修改后的脚本如下:

var ctx = context;


handler.onMessage(function(ruleData){
    var reportTime = getReportTime();

    ctx.getLogger().warn("当前系统时间:");
    ctx.getLogger().warn(reportTime );

    return ruleData.data
})

function getReportTime(){
    var date = new Date();
    var year = date.getFullYear().toString();
    var month = date.getMonth() + 1;
    if (month < 10) {
        month = '0' + month.toString();
    } else {
        month = month.toString();
    }

    var day = date.getDate();
    if (day < 10) {
        day = '0' + day.toString();
    } else {
        day = day.toString();
    }

    var hours = date.getHours();
    if (hours < 10) {
        hours = '0' + hours.toString();
    } else {
        hours = hours.toString();
    }

    var minutes = date.getMinutes();
    if (minutes < 10) {
        minutes = '0' + minutes.toString();
    } else {
        minutes = minutes.toString();
    }

    var seconds = date.getSeconds();
    if (seconds < 10) {
        seconds = '0' + seconds.toString();
    } else {
        seconds = seconds.toString();
    }

    var reportTime = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':00';
    return reportTime;

}

运行发现果然成功了^_^。

01-16 08:55