Node.js中的toLocaleTimeString是否支持hour12选项?

时间:2015-02-08 19:47:06

标签: node.js date

我似乎无法在node.js中工作12小时,但是在浏览器(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以证明它可以在浏览器中使用

有人可以指出解释原因的文档,或者告诉我我做错了什么?

2 个答案:

答案 0 :(得分: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引擎,它一目了然,似乎可以解释这一点。

答案 1 :(得分:0)

您可以使用 toLocaleDateString toLocaleTimeString 来设置时间和日期的格式。传递给这些方法的第一个参数是语言环境值,例如&#34; en-us&#34;。第二个参数(如果存在)指定格式选项,例如工作日的长格式。

我使用过Chrome并且效果很好。

&#13;
&#13;
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));
&#13;
&#13;
&#13;

https://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx