我认为这可能与夏令时有关,但并不完全确定。
基本上我有一个文件,我在渲染器和主进程之间共享。
'use strict';
const time = new Date();
module.exports = () => console.log(time);
当我需要并在主要流程中执行时,我得到
2017-07-10T12:34:17.613Z
然而,当我需要并在渲染器过程中执行时,我得到了
Mon Jul 10 2017 13:44:08 GMT+0100 (GMT Daylight Time)
当我在节点控制台中执行node -e "console.log(new Date())"
时,我获得与主流程相同的输出,这是有意义的,因此我假设chrome以不同的方式管理日期。
我想时差和我无法解释它指出两个问题:
对这两点的任何帮助都将不胜感激。
答案 0 :(得分:1)
新Date()返回的对象在两个上下文中都是相同的,但它会以两种不同的方式自动转换为字符串。
在主进程中,console.log()可能会使用toISOString ()。
在渲染器过程中,会发生对toString ()的隐式调用:
toString()方法总是返回一个字符串表示形式 用美式英语约会。 JavaScript调用toString()方法 自动将日期表示为文本值或何时 日期在字符串连接中引用。
答案 1 :(得分:1)
关于第二个区别,我做了一些调查,似乎缓存是在进程级别处理的。实际上,我在这个页面上找到了一些有用的信息:
Deep dive into Electron’s main and renderer processes
例如,假设我有一个模块可以保存一些我的状态 在我的主要和渲染过程中都需要。
如果我在渲染器中递增,渲染器中的计数将为1, 但在主要过程中它仍然是0。这两个过程没有 分享记忆或状态。实际上有两个例子 模块运行。
为了在两个进程中显示相同的时间,可能更好的方法是使用共享的全局变量来存储通过将.toISOString()或toString()应用于新的Date()而返回的字符串,然后显式调用来自每个进程的console.log()。
在主要过程中:
global.time = new Date ().toString ();
console.log (global.time);
在渲染器过程中:
console.log (remote.getGlobal ('time'));