#4548·hexo

与前部资料相关的日期和时区问题

作者: SukkaW创建于 2020年9月29日更新于 2026年4月10日
标签discussiondates

□ 检查列表

在提交新刊前请检查以下内容.

这一问题已在下列报告:

  • 4239号

  • 3397号

  • 3282号 -2063号

            • 说说看

例如,我有一个职位设置如下:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

定义.yml

时区:亚洲/上海


{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
标题: 你好,世界
日期:2020-09-29 23:00:00

此外,我的机器处于“亚洲/上海”时区之下,这也将影响Node.js的时区。

在由js-yaml'处理的前题后,将“类似日期的字符串”转换为日期'对象:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? js-yaml = 需要("js-yaml");

jsYaml.load('date:2020-09-29 23:00:00'); (中文(简体) ). // >"Tue,2020年9月29日 格林尼治平时23:00"


注意输入被转换成协调世界时吗? 用户只用本地时间填写前置事项,而不使用协调世界时. 因此,这不是理想的行为。

因此,在处理前题时,使用了“Date#getTimezoneOffset”:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
//https://GitHub.com/hexojs/hexo-front-matter/blob/ccbdff36d151a56932418cdc6d0329d866032a1b/lib/front matter.js#L55-L62

// 转换时区
对象. keys (data). forEach( key QQ {)
cont项=数据[关键];

如果(日期项目实例){
data[key]=新日期(项目.getTime ()+(项目.getTimezoneOffset () * 60 * 1000));
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
* ;

其结果将是:

2020年9月29日格林尼治平时下午3:00

这是理想的行为。

然后,在pf的处理中,使用了`moment.timezone':

https://GitHub.com/hexojs/hexo/blob/557487a2f8ab0065bf94d5a9466c54034f1db17f/lib/plugins/processor.js#L80-L82 https://GitHub.com/hexojs/hexo/blob/557487a2f8ab0065bf94d5a9466c54034f1db17f/lib/plugins/processor/common.js#L51-L60

如果“配置.timezone”的配置正确,则“timezone()”前后没有区别:

2020年9月29日格林尼治平时下午3:00
/ 没有区别

以下为演示: https://runkit.com/sukaw/5f732261a7aac8001a42bcc4

日期#GetTimezone Offset : -480
日期由js-yaml解析:Tue,2020年9月29日格林尼治平时23:00
页:1
时间段后日期:Tue,2020年9月29日格林尼治平时下午3:00
时间段后日期(无预补):Tue,2020年9月29日格林尼治标准时间下午3:00 以后再谈

那么,一个不同的时区环境呢? 例如CI环境. 它的时区不会是 " 亚洲/上海 " 。

这是另一个演示: https://repl.it/repls/LividBewitched Controlflowgraph#index.js 互联网档案馆的存檔,存档日期2007-12-11.

日期#GetTimezoneOffset: 0 // 见? 已经不是 -480了,现在是现在了
. . . . . . .