日期.toLocaleDateString格式问题

4

Date.toLocaleDateString()在我运行discord.js机器人的nodejs服务器(v10.15.0)上的Windows 10笔记本电脑中无法工作。它显示mm/dd/yyyy而不是dd/mm/yyyy。

我将'en-GB'用作区域设置的第一个参数,并将要实现的格式(dd/mm/yyyy)用作第二个参数。在https://js.do/中,它显示为dd/mm/yyyy,但在我的笔记本电脑上以mm/dd/yyyy显示,除了“document.write”之外,它们都使用相同的代码。我使用“console.log”来显示结果。

let d1 = new Date();
let options = {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit'
};
document.write(d1.toLocaleString('en-GB', options)); // console.log in my laptop

我希望日期格式为dd/mm/yyyy,因为它在'en-GB'语言环境下,而不是mm/dd/yyyy格式。
问题是什么?是因为nodejs还是js.do网站?正如在这个主题中讨论的那样:Date.toLocaleDateString() not working on Nodejs v10.14.2,但我认为问题略有不同。

1
在我的 Chrome 浏览器上,输出是 13/01/2019,这应该是正确的。 - quirimmo
1
没关系,我很乐意帮忙并且我学到了一件之前不知道的事情 :) - quirimmo
1
我认为你应该可以通过NODE_ICU_DATA=“C:\Users\jeffo\AppData\Roaming\npm\node_modules\full-icu” node MY_INDEX.js执行你的Node.js应用程序来解决此问题,但是我并不真正了解这个路径如何修复这个问题,至少要动态提供它,否则你将拥有一个指向硬盘的静态路径。 - quirimmo
2
没问题,看起来你也是新用户,所以请好好回答自己的问题(你可以回复自己的问题),报告关于问题原因、解决方法等所有信息,这样对未来的其他人可能也会有用,你还可以在SO上获得一些积分!几天后你甚至可以将其标记为已接受的答案。当然,完成后请回复我,我也会点赞 :) - quirimmo
1
@quirimmo 完成了!无法感谢你的足够,这个问题让我沮丧了几个小时。 - jeffng50
显示剩余9条评论
2个回答

5

显然,nodejs默认只包含en-US语言环境,正如此处所述,因此会使用mm/dd/yyyy格式。

我按照该问题中targos的建议安装了full-icu模块。

在安装完之后,我运行了npm install(因为这个原因),然后在命令行中看到了这个消息:

 For package.json:
{"scripts":{"start":"node --icu-data-dir=node_modules\\full-icu YOURAPP.js"}}

我相应地编辑了启动脚本,并且它产生了所需的dd/mm/yyyy结果。

非常感谢@quirimmo在我的问题评论中的帮助!


1
我能够重现这个问题,请尝试使用dateformat,如果你的代码允许的话。

$ npm install dateformat

var dateFormat = require('dateformat');

let d1 = new Date();
console.log(dateFormat(d1, "GMT:dd/mm/yyyy"));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接