示例:根据开始和结束日期获取中间的所有整点时间
js脚本
// 自定义补零函数
function padZero(num) {
return num < 10 ? '0' + num : num.toString();
}
// 假设 start_time 和 end_time 是传入的起始和结束时间字符串
// 例如:"2025-04-08 08:21:22"
var startStr = start_time;
var endStr = end_time;
// 将字符串转换为 Date 对象
var start = new Date(startStr.replace(/-/g, '/'));
var end = new Date(endStr.replace(/-/g, '/'));
// 把起始时间设置为整点
start.setMinutes(0);
start.setSeconds(0);
start.setMilliseconds(0);
// 存储整点时间的数组
var hourlyData = [];
// 循环生成整点时间
var current = new Date(start);
while (current <= end) {
// 将 Date 对象转换为字符串
var formattedTime = current.getFullYear() + '-' +
padZero(current.getMonth() + 1) + '-' +
padZero(current.getDate()) + ' ' +
padZero(current.getHours()) + ':00:00';
hourlyData.push(formattedTime);
// 时间增加 1 小时
current.setHours(current.getHours() + 1);
}
// Alert()
for (var i = 0; i < hourlyData.length; i++) {
var hour =hourlyData[i];
// 使用 createRowCopy 函数创建一个新行
var row = createRowCopy(getOutputRowMeta().size());
//这里需要特别注意,为什么要获取原数据的长度作为新内容的起始索引呢?
//因为新建的行还是会携带有输入的列的,所以如果使用0开头赋值,则会覆盖掉原列,并且字段名不对应。
var index = getInputRowMeta().size();
row[index]=hour;
putRow(row);
}
// 保证原始的数据行,不会被放入输出流中。 如果不带这一句,则原行还是会输出一行造成重复数据。
trans_Status = SKIP_TRANSFORMATION;