node-red获取系统时间

🎯 方案一:最简优化(推荐)

javascript

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

// 一次性提取所有时间组件
var timeData = {
    year: now.getFullYear(),
    month: (now.getMonth() + 1).toString().padStart(2, '0'),
    day: now.getDate().toString().padStart(2, '0'),
    hours: now.getHours().toString().padStart(2, '0'),
    minutes: now.getMinutes().toString().padStart(2, '0'),
    seconds: now.getSeconds().toString().padStart(2, '0')
};

// 构建最终payload
msg.payload = {
    time: `${timeData.hours}:${timeData.minutes}:${timeData.seconds}`,
    date: `${timeData.year}-${timeData.month}-${timeData.day}`,
    hours: timeData.hours,
    minutes: timeData.minutes,
    seconds: timeData.seconds,
    fullTime: now.toLocaleString('zh-CN', { 
        year: 'numeric',
        month: '2-digit',
        day: '2-digit',
        hour: '2-digit',
        minute: '2-digit',
        second: '2-digit',
        hour12: false // 24小时制
    }),
    timestamp: now.getTime(), // 添加时间戳
    isoString: now.toISOString() // 添加ISO格式
};

return msg;

🚀 方案二:使用工具函数(适合频繁使用)

javascript

// 格式化数字为两位字符串
function formatTwoDigits(num) {
    return num.toString().padStart(2, '0');
}

// 获取格式化时间对象
function getFormattedTime() {
    var now = new Date();
    
    return {
        year: now.getFullYear(),
        month: formatTwoDigits(now.getMonth() + 1),
        day: formatTwoDigits(now.getDate()),
        hours: formatTwoDigits(now.getHours()),
        minutes: formatTwoDigits(now.getMinutes()),
        seconds: formatTwoDigits(now.getSeconds())
    };
}

// 主逻辑
var timeData = getFormattedTime();
msg.payload = {
    time: `${timeData.hours}:${timeData.minutes}:${timeData.seconds}`,
    date: `${timeData.year}-${timeData.month}-${timeData.day}`,
    hours: timeData.hours,
    minutes: timeData.minutes,
    seconds: timeData.seconds,
    fullTime: `${timeData.year}/${timeData.month}/${timeData.day} ${timeData.hours}:${timeData.minutes}:${timeData.seconds}`,
    timestamp: Date.now()
};

return msg;

📊 方案三:扩展功能版(包含更多时间信息)

javascript

var now = new Date();
var timeData = {
    year: now.getFullYear(),
    month: (now.getMonth() + 1).toString().padStart(2, '0'),
    day: now.getDate().toString().padStart(2, '0'),
    hours: now.getHours().toString().padStart(2, '0'),
    minutes: now.getMinutes().toString().padStart(2, '0'),
    seconds: now.getSeconds().toString().padStart(2, '0'),
    milliseconds: now.getMilliseconds().toString().padStart(3, '0'),
    weekday: ['日', '一', '二', '三', '四', '五', '六'][now.getDay()] // 中文星期
};

msg.payload = {
    // 基本时间信息
    time: `${timeData.hours}:${timeData.minutes}:${timeData.seconds}`,
    date: `${timeData.year}-${timeData.month}-${timeData.day}`,
    datetime: `${timeData.year}-${timeData.month}-${timeData.day} ${timeData.hours}:${timeData.minutes}:${timeData.seconds}`,
    
    // 分解时间组件
    hours: timeData.hours,
    minutes: timeData.minutes,
    seconds: timeData.seconds,
    year: timeData.year,
    month: timeData.month,
    day: timeData.day,
    
    // 附加信息
    weekday: timeData.weekday,
    weekNumber: Math.ceil((now.getDate() + 6 - now.getDay()) / 7), // 周数
    timestamp: now.getTime(),
    isoString: now.toISOString(),
    
    // 兼容原有字段
    fullTime: now.toLocaleString('zh-CN', {
        year: 'numeric',
        month: '2-digit',
        day: '2-digit',
        hour: '2-digit',
        minute: '2-digit',
        second: '2-digit',
        hour12: false
    })
};

return msg;

⚡ 方案四:最简洁版(性能最优)

javascript

var now = new Date();
var pad = n => n.toString().padStart(2, '0');

msg.payload = {
    time: `${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())}`,
    date: `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}`,
    hours: pad(now.getHours()),
    minutes: pad(now.getMinutes()),
    seconds: pad(now.getSeconds()),
    fullTime: now.toLocaleString()
};

return msg;

💡 主要改进点:

  1. 减少重复代码:使用模板字符串和统一的数据结构
  2. 添加有用字段:时间戳、ISO格式、星期等信息
  3. 更好的格式化:使用本地化选项确保一致性
  4. 性能优化:减少不必要的函数调用
  5. 可维护性:代码结构更清晰

📋 输出示例:

json

{
  "time": "14:30:45",
  "date": "2025-09-18",
  "hours": "14",
  "minutes": "30",
  "seconds": "45",
  "fullTime": "2025/09/18 14:30:45",
  "timestamp": 1726633845000,
  "isoString": "2025-09-18T06:30:45.000Z",
  "weekday": "四"
}

推荐使用方案一,它在简洁性和功能性之间取得了很好的平衡。如果你的项目中有多处需要时间格式化,方案二会更合适。

使用 Moment 节点(node-red-contrib-moment)

如果需要更强大的时间格式化功能,可以使用 node-red-contrib-moment 节点。

  1. 安装节点:通过 Node-RED 的“节点管理”安装 node-red-contrib-moment
  2. 使用 Date/Time Formatter 节点:配置该节点时,在 Output Format 字段中指定你需要的格式,例如:
    • YYYY-MM-DD HH:mm:ss → 2025-09-18 10:30:00
    • HHmm → 1030 (小时和分钟组合)
    • YYYYMMDD → 20250918 (日期组合)
      你可以在节点的帮助面板或 Moment.js 文档 查看所有格式选项
  3. 设置时区:在节点的配置中,将时区(Timezone)设置为 Asia/Shanghai (上海) 以确保获取中国时间
支付10元解锁内容
会员尊享 0.95 折优惠,可节省 0.50
立即购买升级会员
本网站所收集的公开资料部分来源于互联网,其版权归原作者本人所有,本站只是转载和摘录,目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其的真实性能做到合理的研判负责,也不构成任何其他建议,如果有任何侵犯您权益和知识产权的地方,请来邮或来电告知本站,经过核实,我们会及时的进行整理删除,谢谢!
评论 共0条
取消回复 发布评论