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

bbr*_*ame 268 javascript format time datetime date

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

bbr*_*ame 486

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));
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢这个'分钟=('0'+分钟).slice(-2);`而不是'分钟=分钟<10?'0'+分钟:分钟; ` (5认同)
  • 这太疯狂了,有人提议从头开始构建一个轮子,如果我们有 JS 内置的东西的话,它得到了如此多的选票并显示为最佳答案。反对它,并且个人不喜欢这种态度,我可以自己实施,然后检查是否有一些好的内置解决方案可以解决您的问题,并且经过良好的测试、维护和推荐。只需看一下“toLocaleString”,它可以通过多种方式格式化 JS DateTime,包括您的情况。并且自古以来所有浏览器都支持 https://caniuse.com/?search=toLocaleString (5认同)
  • 你还宣布两次"小时"变量,但使"strTime"成为偶然的全局变量.它不是非常优雅,但这似乎是使用本机方法的正确技术. (3认同)
  • @Balz如果分钟小于10(例如16:04),则该语句添加字符串"0",以便格式化输出为"4:04 PM"而不是"4:4 PM".请注意,在此过程中,分钟从Number更改为String. (2认同)

Abh*_*mar 169

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

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

输出:上午7点

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

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

输出:上午7:23

  • 这是最好的答案,但如何更改 AM/PM 的大小写 (5认同)
  • 这应该是2018年接受的答案. (4认同)
  • 只有IE11 +支持`toLocaleString`. (3认同)
  • @HumbleDolt您可能会将“数字”与“2位数字”混淆。 (2认同)

Mik*_*sen 52

您还可以考虑使用date.js之类的东西:

<html>
<script type="text/javascript" src="http://www.datejs.com/build/date.js"></script>

<script>
   (function ()
   {
      document.write(new Date().toString("hh:mm tt"));
   })();
</script>
</html>
Run Code Online (Sandbox Code Playgroud)


Ste*_*ber 41

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

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"))
Run Code Online (Sandbox Code Playgroud)

这将创建3个匹配组:

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

然后它显示第1组和第3组.

警告:toLocaleTimeString()可能会根据区域/位置而有所不同.

  • 人们不够使用正则表达式.这对我有用,但没有添加上面的jquery/microsoftajax库建议. (3认同)

rat*_*ray 33

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

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

这是基于@bbrame的答案.

  • @koolinc在午夜显示12.我不确定还有什么是理想的行为. (3认同)

小智 20

现代浏览器中,使用Intl.DateTimeFormat并强制使用12 小时格式的选项:

    let now = new Date();

    new Intl.DateTimeFormat('default',
        {
            hour12: true,
            hour: 'numeric',
            minute: 'numeric'
        }).format(now);

    // 6:30 AM
Run Code Online (Sandbox Code Playgroud)

default如果您添加更多选项,使用将遵循浏览器的默认语言环境,但仍会输出 12 小时格式。


小智 16

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

     date.toLocaleString([], { hour12: true});
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

如何在不显示秒的情况下使用.toLocaleTimeString()?


Ank*_*jan 15

为此使用Moment.js

使用 moment.js 时在 JavaScript 中使用以下代码

H, HH       24 hour time
h, or hh    12 hour time (use in conjunction with a or A)
Run Code Online (Sandbox Code Playgroud)

format()方法以特定格式返回日期。

moment(new Date()).format("YYYY-MM-DD HH:mm"); // 24H clock
moment(new Date()).format("YYYY-MM-DD hh:mm A"); // 12H clock (AM/PM)
moment(new Date()).format("YYYY-MM-DD hh:mm a"); // 12H clock (am/pm)
Run Code Online (Sandbox Code Playgroud)


Vij*_*iya 13

我的建议是使用时刻js进行日期和时间操作.

https://momentjs.com/docs/#/displaying/format/

console.log(moment().format('hh:mm a'));
Run Code Online (Sandbox Code Playgroud)
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


Lir*_*nBo 11

使用 dateObj.toLocaleString([locales[, options]])

选项1 - 使用区域设置

var date = new Date();
console.log(date.toLocaleString('en-US'));
Run Code Online (Sandbox Code Playgroud)

选项2 - 使用选项

var options = { hour12: true };
console.log(date.toLocaleString('en-GB', options));
Run Code Online (Sandbox Code Playgroud)

注意:所有浏览器都支持safari atm


Kri*_*rya 10

请在下面找到解决方案

var d = new Date();
var amOrPm = (d.getHours() < 12) ? "AM" : "PM";
var hour = (d.getHours() < 12) ? d.getHours() : d.getHours() - 12;
return   d.getDate() + ' / ' + d.getMonth() + ' / ' + d.getFullYear() + ' ' + hour + ':' + d.getMinutes() + ' ' + amOrPm;
Run Code Online (Sandbox Code Playgroud)

  • 对于小时计算,应小于或等于,否则中午显示为 0。因此:var hour = (d.getHours() &lt;= 12)。午夜仍然存在问题,因此您必须检查是否为零,然后也设置为 12。 (2认同)

Geo*_*Geo 9

en-US的简短RegExp:

var d = new Date();
d = d.toLocaleTimeString().replace(/:\d+ /, ' '); // current time, e.g. "1:54 PM"
Run Code Online (Sandbox Code Playgroud)


小智 8

更新更多压缩

const formatAMPM = (date) => {
  let hours = date.getHours();
  let minutes = date.getMinutes();    
  const ampm = hours >= 12 ? 'pm' : 'am';

  hours %= 12;
  hours = hours || 12;    
  minutes = minutes < 10 ? `0${minutes}` : minutes;

  const strTime = `${hours}:${minutes} ${ampm}`;

  return strTime;
};

console.log(formatAMPM(new Date()));
Run Code Online (Sandbox Code Playgroud)


I B*_*I B 6

它将返回以下格式,如

09:56 AM
Run Code Online (Sandbox Code Playgroud)

如果小时数小于 10,则在开始时附加零

这里使用的是 ES6 语法


Chr*_*nte 5

查看Datejs。他们内置的格式化程序可以做到这一点:http : //code.google.com/p/datejs/wiki/APIDocumentation#toString

这是一个非常方便的库,尤其是如果您打算对日期对象进行其他操作。

  • @RobG:正如你所看到的,我写这个答案已经有一段时间了。我现在意识到这一点。 (2认同)

vam*_*nem 5

我发现它在这里工作正常。

var date_format = '12'; /* FORMAT CAN BE 12 hour (12) OR 24 hour (24)*/
 
 
var d       = new Date();
var hour    = d.getHours();  /* Returns the hour (from 0-23) */
var minutes     = d.getMinutes();  /* Returns the minutes (from 0-59) */
var result  = hour;
var ext     = '';
 
if(date_format == '12'){
    if(hour > 12){
        ext = 'PM';
        hour = (hour - 12);
        result = hour;

        if(hour < 10){
            result = "0" + hour;
        }else if(hour == 12){
            hour = "00";
            ext = 'AM';
        }
    }
    else if(hour < 12){
        result = ((hour < 10) ? "0" + hour : hour);
        ext = 'AM';
    }else if(hour == 12){
        ext = 'PM';
    }
}
 
if(minutes < 10){
    minutes = "0" + minutes; 
}
 
result = result + ":" + minutes + ' ' + ext; 
 
console.log(result);
Run Code Online (Sandbox Code Playgroud)

和 plunker 的例子在这里


car*_*m85 5

希望这个答案比其他答案更具可读性(特别是对于新来者)。

这是我在一些网站中实现的解决方案,用于通知上次修改网站代码的时间。options它通过参数实现AM/PM时间date.toLocaleDateString参见相关Mozilla文档)。

// Last time page code was updated/changed
const options = {
    year: "numeric",
    month: "long",
    weekday: "long",
    day: "numeric",
    hour: "numeric",
    minute: "numeric",
    second: "numeric",
    hour12: true // This is the line of code we care about here
    /*
        false: displays 24hs format for time
        true: displays 12, AM and PM format
    */
};

let last = document.lastModified;
let date = new Date(last);
let local = date.toLocaleDateString("en-US", options);
let fullDate = `${local}`;
document.getElementById("updated").textContent = fullDate;
Run Code Online (Sandbox Code Playgroud)

其输出格式为:

Saturday, May 28, 2022, 8:38:50 PM
Run Code Online (Sandbox Code Playgroud)

然后,此输出显示在以下 HTML 代码中:

<p>Last update: <span id="updated">_update_date_goes_here</span></p>
Run Code Online (Sandbox Code Playgroud)

注意:在这个用例中,document.lastModified有一些奇怪的行为,具体取决于它是在本地运行还是在外部服务器上运行(请参阅此 Stack Overflow 问题)。尽管当我在 GitHub 页面中运行它时它可以正常工作(您应该在网站的页脚处看到它的运行情况