2015-02-08 85 views
4

我似乎无法在node.js中使用hour12时间,但是在浏览器(Chrome)中它工作得很好。Node.js中的toLocaleTimeString是否支持hour12选项?

的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来证明它在浏览器

有人能指出我解释为什么的文档,或者告诉我我做错了什么?

回答

4

这不仅仅是你。我尝试在Node.js中运行相同的块,并且无法轻松地以12小时格式打印它。

做了一些谷歌搜索之后,似乎Moment.js是一个流行的操作和显示时间和日期的工具。如果您需要操纵很多时间/日期,则可能需要查看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引擎,我开始在源代码中寻找。我看不到一个考虑到传递给它的参数的地方。

代码是heretoLocaleTimeString是324行。相比之下,我环顾了Mozilla的SpiderMonkey引擎,并且它一眼就可以解释这一点。

+0

感谢确认我是不是疯了。 – 2015-04-05 23:36:32

+0

为问题添加了更合适的答案。 – shellhead 2015-04-06 01:40:50

+0

我会给你额外工作的要点。你确认我没有做错任何事情,而V8只是不遵循规范。谢谢。 – 2015-04-06 15:17:48

0

您可以使用toLocaleDateStringtoLocaleTimeString格式化时间和日期。传递给这些方法的第一个参数是一个区域设置值,例如“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