在用Electron做PC软件,需要同步服务器时间. 避免因为本地设置时间异常导致上传上来的数据异常
前因
毕竟Electron是支持Native API的. 那么设置PC的系统时间应该问题不大~ 搜索引擎走起~ Bing、Baidu、Google 输入Electron 修改系统时间 啪的一下~ 网速很快啊~ 结果牛头不对马嘴 搜索引擎不给力啊… 也许是我关键词不对,曲线救国走起~ 尝试 VUE 修改系统时间 NodeJS 修改系统时间 JS 修改系统时间 牛头不对马嘴+1、+2、+3 直到我灵机一动,我机智的尝试了一把我的散装英语 nodejs setSystemTime 然后我找到了这个 Node.js - Set system date / time StackOverFlow 老哥牛逼~~~ StackOverFlow 老哥牛逼~~~ StackOverFlow 老哥牛逼~~~
照葫芦画瓢
既然老哥都给出了方法,那岂不是稳如老狗. npm i node-windows 先把这个组件库搞下来,然后照葫芦画瓢 贴一下代码
//这里入参是服务器返回给我的 字符串类型的时间戳
notifySysTime(time) {
let baseTime = moment(parseInt(time)).format()
console.log('服务器转换时间0:~~~~~~~~~~~', baseTime)
let dateTime = new Date(baseTime)
console.log('服务器转换时间1:~~~~~~~~~~~', dateTime)
let year = dateTime.getFullYear()
let month = dateTime.getUTCMonth() + 1
let day = dateTime.getDate()
let h = dateTime.getHours() < 10 ? '0' + dateTime.getHours() : dateTime.getHours()
let mm =dateTime.getMinutes() < 10 ? '0' + dateTime.getMinutes() : dateTime.getMinutes()
let s =dateTime.getSeconds() < 10 ? '0' + dateTime.getSeconds() : dateTime.getSeconds()
let updateDate = `${year}-${month}-${day} ${h}:${mm}:${s}`
let updateTime = `${h}:${mm}:${s}`
console.log('服务器转换时间2:~~~~~~~~~~~', updateDate+"~~~"+updateTime)
win.elevate(`cmd /c date ${updateDate}`)
win.elevate(`cmd /c time ${updateTime}`)
},
3个log输出的分别是:
服务器转换时间0:~~~~~~~~~~~ 2021-11-23T20:24:57+08:00
服务器转换时间1:~~~~~~~~~~~ Tue Nov 23 2021 20:24:57 GMT+0800 (中国标准时间)
服务器转换时间2:~~~~~~~~~~~ 2021-11-23 20:24:57~~~20:24:57
cmd /c date & cmd /c time
为什么这个命令就可以呢? cmd自不必多说. /c 表示Close,执行完自动关闭窗口. 相同的还有一个 /k 表示Keep,执行完窗口还开着. 其实就是相当于仔细了这2个 命令,然后把服务器时间传进来了而已. 后续如果类似的需要通过cmd来解决的问题,就可以直接举一反三了.
|