【问题标题】:How to set am/pm in javascript如何在javascript中设置上午/下午
【发布时间】:2020-02-12 20:30:48
【问题描述】:

我正在使用 new Date() 来创建自定义时间,并且我正在使用函数将时间格式化为上午/下午:

const formatTimeAMPM = (date, midnight = { am: "AM", pm: "PM" }) => {
  var hours = date.getHours();
  var minutes = date.getMinutes();
  var ampm = hours >= 12 ? ` ${midnight.am}` : ` ${midnight.pm}`;
  hours = hours % 12;
  hours = hours ? hours : 12; // the hour '0' should be '12'
  minutes = minutes < 10 ? "0" + minutes : minutes;
  hours = hours < 10 ? "0" + hours : hours;
  var strTime = hours + ":" + minutes + " " + ampm;
  return strTime;
};

let startDate = new Date(Date.now());
console.log('before change :',formatTimeAMPM(startDate));
startDate.setHours(8, 30, 0, 0);
console.log('after change :',formatTimeAMPM(startDate));

如果你运行 sn-p,你会看到控制台日志是 8:30 pm,谁能告诉我当我改变 startDate 小时时如何设置它?

【问题讨论】:

  • 使用moment.js。为什么要重写轮子?格式化、解析、时区、差异......
  • moment 有很多功能,但是 moment.min.js 大小是 16.7k,我不是租卡车去打针

标签: javascript time


【解决方案1】:

你的上午/下午支票是倒退的:

var ampm = hours >= 12 ? ` ${midnight.am}` : ` ${midnight.pm}`;

如果小时 >= 12,则应该是 PM 而不是 AM,所以应该是:

var ampm = hours >= 12 ? ` ${midnight.pm}` : ` ${midnight.am}`;

现在如果你运行它,它将显示8:30 AM,如果你将小时设置为20,它将显示8:30 PM

这将解决您当前的问题,但最好使用现有库进行日期格式化,因为它可能会变得复杂,尤其是使用 i18n。有几个受欢迎的,例如 date-fnsmoment.js,将为您完成繁重的工作。

【讨论】:

  • 这个功能也可以,我在别处也用过,我的问题是当我改变小时和分钟时如何设置am
  • 小时 8 是早上 8 点,所以逻辑应该颠倒过来。如果您只想使用当前逻辑显示上午 8 点,您可以将小时设置为 20,即:startDate.setHours(20, 30, 0, 0);
猜你喜欢
  • 1970-01-01
  • 2021-12-08
  • 2013-05-28
  • 2012-03-28
  • 2013-06-04
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 2012-01-26
相关资源
最近更新 更多