Node.js 中的 toLocaleTimeString 是否支持 hour12 选项?
Does toLocaleTimeString in Node.js support the hour12 option?
我似乎无法在 node.js 中使用 hour12 时间,但是在浏览器中 (Chrome) 它工作得很好。
Node.js 在终端
var date = new Date();
var d12 = date.toLocaleTimeString('en-US', {hour12:true});
var d24 = date.toLocaleTimeString('en-US', {hour12:false});
console.log(d12) // output 13:43:38
console.log(d24) // output 13:43:38
两者产生相同的结果:
13:43:38
更新
添加 fiddle 以证明它在浏览器中有效
有人可以指点我解释原因的文档,或者告诉我哪里做错了吗?
不只是你。我在 Node.js 中尝试了 运行 相同的块,但无法轻松地以 12 小时格式打印它。
经过一些谷歌搜索,Moment.js 似乎是一种用于处理和显示时间和日期的流行工具。如果您需要操作很多 time/dates,可能值得一试,Moment.js。
// with Moment
var moment = require('moment');
console.log(moment().format('hh:mm'));
否则,
// just one of many ways to do it in Javascript
function hour12 (hour) {
var mod = hour % 12;
if (mod < 10) {
return '0'.concat(mod);
} else {
return mod;
}
}
console.log(new Date().toLocaleTimeString().replace(/[\d]+/, hour12(date.getHours())));
编辑 我在深夜回答了这个问题,然后意识到我在解决这个问题上有点失误了。
由于 Node.js 是基于 Chrome 的 v8 JavaScript 引擎,我开始研究源代码。我看不到它考虑传递给它的参数的地方。
代码是here,toLocaleTimeString
是第324行。相比之下,我看了看Mozilla的SpiderMonkey引擎,一看就知道,好像是这个原因。
您可以使用 toLocaleDateString 和 toLocaleTimeString 来格式化时间和日期。传递给这些方法的第一个参数是区域设置值,例如 "en-us"。第二个参数(如果存在)指定格式选项,例如工作日的长格式。
我用过 Chrome 并且效果很好。
var date = new Date(Date.UTC(2016, 3, 7, 14, 30, 0));
var options = {
weekday: "long", year: "numeric", month: "short",
day: "numeric", hour: "2-digit", minute: "2-digit"
};
document.write(date.toLocaleTimeString("en-US", options));
https://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx
我似乎无法在 node.js 中使用 hour12 时间,但是在浏览器中 (Chrome) 它工作得很好。
Node.js 在终端
var date = new Date();
var d12 = date.toLocaleTimeString('en-US', {hour12:true});
var d24 = date.toLocaleTimeString('en-US', {hour12:false});
console.log(d12) // output 13:43:38
console.log(d24) // output 13:43:38
两者产生相同的结果: 13:43:38
更新 添加 fiddle 以证明它在浏览器中有效
有人可以指点我解释原因的文档,或者告诉我哪里做错了吗?
不只是你。我在 Node.js 中尝试了 运行 相同的块,但无法轻松地以 12 小时格式打印它。
经过一些谷歌搜索,Moment.js 似乎是一种用于处理和显示时间和日期的流行工具。如果您需要操作很多 time/dates,可能值得一试,Moment.js。
// with Moment
var moment = require('moment');
console.log(moment().format('hh:mm'));
否则,
// just one of many ways to do it in Javascript
function hour12 (hour) {
var mod = hour % 12;
if (mod < 10) {
return '0'.concat(mod);
} else {
return mod;
}
}
console.log(new Date().toLocaleTimeString().replace(/[\d]+/, hour12(date.getHours())));
编辑 我在深夜回答了这个问题,然后意识到我在解决这个问题上有点失误了。
由于 Node.js 是基于 Chrome 的 v8 JavaScript 引擎,我开始研究源代码。我看不到它考虑传递给它的参数的地方。
代码是here,toLocaleTimeString
是第324行。相比之下,我看了看Mozilla的SpiderMonkey引擎,一看就知道,好像是这个原因。
您可以使用 toLocaleDateString 和 toLocaleTimeString 来格式化时间和日期。传递给这些方法的第一个参数是区域设置值,例如 "en-us"。第二个参数(如果存在)指定格式选项,例如工作日的长格式。
我用过 Chrome 并且效果很好。
var date = new Date(Date.UTC(2016, 3, 7, 14, 30, 0));
var options = {
weekday: "long", year: "numeric", month: "short",
day: "numeric", hour: "2-digit", minute: "2-digit"
};
document.write(date.toLocaleTimeString("en-US", options));
https://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx