如何以 12 小时 AM/PM 格式显示 JavaScript 日期时间?

IT技术 javascript datetime date time format
2021-01-24 14:55:19

如何以 12 小时格式 (AM/PM) 显示 JavaScript 日期时间对象?

6个回答

function formatAMPM(date) {
  var hours = date.getHours();
  var minutes = date.getMinutes();
  var ampm = hours >= 12 ? 'pm' : 'am';
  hours = hours % 12;
  hours = hours ? hours : 12; // the hour '0' should be '12'
  minutes = minutes < 10 ? '0'+minutes : minutes;
  var strTime = hours + ':' + minutes + ' ' + ampm;
  return strTime;
}

console.log(formatAMPM(new Date));

@Balz 如果分钟小于 10(例如 16:04),则该语句会添加字符串“0”,以便格式化输出为“4:04 PM”而不是“4:4 PM”。请注意,在此过程中,分钟从数字变为字符串。
2021-03-15 14:55:19
这太疯狂了,有人提议从头开始构建一个轮子,如果我们有 JS 内置的东西,它得到了如此多的选票并显示为最佳答案。对它投反对票,个人不喜欢这种态度,我可以自己实施,然后再检查是否有针对您的问题的好的内置解决方案,该解决方案经过良好测试、维护和推荐。看看toLocaleString它可以以多种方式格式化JS DateTime,包括您的情况。并且被古代所有浏览器支持caniuse.com/?search=toLocaleString
2021-03-22 14:55:19
分钟的@Vignesh 解决方案更好,因为如果您执行建议的 21:00:00 变为 9:000。Vignesh 为您提供正确的分钟数:00。如果您要使用上述解决方案,那么您还必须考虑 00。(分钟>0 && 分钟 < 10) ? '0'+分钟:分钟;
2021-03-24 14:55:19
此外,您两次声明了“小时”变量,但使“strTime”意外成为全局变量。它不是非常优雅,但这似乎是使用本机方法的正确技术。
2021-04-04 14:55:19
我更喜欢这个minutes = ('0'+minutes).slice(-2);而不是 minutes = minutes < 10 ? '0'+minutes : minutes;
2021-04-04 14:55:19

如果您只想显示小时,那么..

var time = new Date();
console.log(
  time.toLocaleString('en-US', { hour: 'numeric', hour12: true })
);  

输出:早上 7 点

如果您还想显示会议记录,那么...

var time = new Date();
console.log(
  time.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true })
);

输出:上午 7:23

@HumbleDolt 您可能'numeric''2-digit'.
2021-03-24 14:55:19
它应该返回 07:23,IMO
2021-03-27 14:55:19
截至 2018 年 2 月,它在 chrome Neolisk 上运行良好 - developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-03-28 14:55:19
@Katie 也在 2019 年
2021-03-29 14:55:19
小时、分钟和上午/下午呢?
2021-04-02 14:55:19

这是使用正则表达式的一种方法:

console.log(new Date('7/10/2013 20:12:34').toLocaleTimeString().replace(/([\d]+:[\d]{2})(:[\d]{2})(.*)/, "$1$3"))
console.log(new Date('7/10/2013 01:12:34').toLocaleTimeString().replace(/([\d]+:[\d]{2})(:[\d]{2})(.*)/, "$1$3"))

这将创建 3 个匹配组:

  • ([\d]+:[\d]{2}) - 小时:分钟
  • (:[\d]{2}) - 秒
  • (.*) - 空格和句号(句号是 AM/PM 的正式名称)

然后显示第 1 组和第 3 组。

警告:toLocaleTimeString() 的行为可能因地区/位置而异。

人们对正则表达式的使用不够。这对我有用,而无需添加上面的 jquery/microsoftajax 库建议。
2021-03-11 14:55:19
如果它是一位数,那么在小时开始时有一个尾随零是什么正则表达式。在你的第一个例子中 8:12 PM 是 08:12 PM?
2021-03-14 14:55:19
在澳大利亚不行。 new Date('7/10/2013 20:12:34').toLocaleTimeString()20:12:34,正则表达式只是给了20:12@abhay-kumar 回答time.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true })有效。
2021-03-26 14:55:19
console.log(new Date().toLocaleTimeString().replace(/([\d]+:[\d]{2})(:[\d]{2})(.*)/, "$1$3 ")); 获取当前时间
2021-04-04 14:55:19
@404 是一样的,([\d]+:[\d]{2})是我们感兴趣的部分。使用冒号 (:) 作为分隔符,我们看到第一部分是[\d]+. 加号表示一个或多个。所以它正在寻找一位或多位数字(包括零。如果你必须保证有零,那就是(0[\d]:[\d]{2})。现在读取,寻找 0 加一位其他数字,然后是冒号,然后是其余的。
2021-04-05 14:55:19

如果您不需要打印 am/pm,我发现以下内容简洁明了:

var now = new Date();
var hours = now.getHours() % 12 || 12;  // 12h instead of 24h, with 12 instead of 0. 

这是基于@bbrame 的回答。

@koolinc 午夜显示 12。我不确定还有什么期望的行为。
2021-04-06 14:55:19
我站着纠正。在我的国家使用 24 小时制,所以我对 12 小时制不是很熟悉。事实上,午夜是凌晨 12:00。
2021-04-09 14:55:19

据我所知,在没有扩展和复杂编码的情况下实现这一目标的最佳方法是这样的:

     date.toLocaleString([], { hour12: true});

Javascript AM/PM 格式

<!DOCTYPE html>
<html>
<body>
    <p>Click the button to display the date and time as a string.</p>

    <button onclick="myFunction()">Try it</button>
    <button onclick="fullDateTime()">Try it2</button>
    <p id="demo"></p>
    <p id="demo2"></p>
    <script>
        function myFunction() {
            var d = new Date();
            var n = d.toLocaleString([], { hour: '2-digit', minute: '2-digit' });
            document.getElementById("demo").innerHTML = n;
        }
        function fullDateTime() {
            var d = new Date();          
            var n = d.toLocaleString([], { hour12: true});
            document.getElementById("demo2").innerHTML = n;
        }
    </script>
</body>
</html>

我发现这个检查了这个问题。

如何使用 .toLocaleTimeString() 而不显示秒数?

这是一个很好的本地解决方案。
2021-03-25 14:55:19
这是最简单的答案。投票,因为它是一个 javascript 本机解决方案。谢谢
2021-03-31 14:55:19