将24小时制转换为12小时制并跟踪AM / PM

时间:2020-09-06 02:53:46

标签: javascript

我需要将从d.getHours()函数获得的24小时制转换为12小时制,同时还要跟踪AM / PM。

我最近的迭代看起来像这样:

  // get current date
  var date = new Date();
  // get current hours
  var currentHour = date.getHours();
  // for loop counter variable
  var i;

  console.log("Current hour: " + currentHour);
  // used when currentHour + i goes past 24. (25th hour is 0).
  resetCounter = 0;

  for (i = 1; i < 9; i++) {
    // sets variable for spans
    var hourlyForecastHours = document.getElementById("hourly" + i);
    var hourlyForecastTemp = document.getElementById("hourly-temp" + i);
    var hourlyForecastDesc = document.getElementById("hourly-desc" + i);
    
    // first hour to be displayed is currentHour (now) plus i hour.
    hour = currentHour + i;

    // if currentHour + i is greater than or equal to 24
    if (hour >= 24) {
      // set hour to 0 + resetCounter
      hour = 0 + resetCounter;
      // increment resetCounter
      resetCounter++;
    }

    // convert 24 hr time to 12 hr time

    hour = hour % 12;

    // if hr is 0, make it show 12.

    if (hour == "0") {
      hour = 12;
    }

    hourlyForecastHours.textContent = hour;
    console.log("Hour + " + i + ": " + hour);
  }

这可以满足我的需求。截至当前小时,它会输出“ 9、10、11、12、1、2、3”。

现在,我需要跟踪AM / PM。我已经尝试了诸如将24小时制的格式时间设置为<12或> = 12的变量设置为“ AM”或“ PM”的事情,然后将其附加到转换为12小时制的时间的末尾

我对此感到困惑,如何使它正常工作?

2 个答案:

答案 0 :(得分:0)

您可以这样做(项目#指代代码示例,因此您可以确切地看到它的去向):

  1. 声明一个变量以跟踪上午/下午

    var timeAmPm = "am";

  2. 之前,将时间重置为12小时,检查时间是否大于12,并将var设置为ampm

    (hour > 12) ? timeAmPm = "pm" : timeAmPm = "am";

  3. 根据需要使用变量,例如

    var time = "Hour + " + i + ": " + hour + timeAmPm;

工作示例(使用您的代码-除了访问HTML元素的代码,因为您没有给我们提供这些代码),

// get current date
  var date = new Date();
  // get current hours
  var currentHour = date.getHours();
  // for loop counter variable
  var i;

  // 1. declare a variable to track am/pm
  var timeAmPm = "am"; 
  
  console.log("Current hour: " + currentHour);
  // used when currentHour + i goes past 24. (25th hour is 0).
  resetCounter = 0;

  for (i = 1; i < 24; i++) {
 
    // first hour to be displayed is currentHour (now) plus i hour.
    hour = currentHour + i;

    // if currentHour + i is greater than or equal to 24
    if (hour >= 24) {
      // set hour to 0 + resetCounter
      hour = 0 + resetCounter;
      // increment resetCounter
      resetCounter++;
    }

    // 2. Before you reset the time, check if it is am or pm
    (hour > 12) ? timeAmPm = "pm" : timeAmPm = "am";

    // convert 24 hr time to 12 hr time
    hour = hour % 12;

    // if hr is 0, make it show 12.

    if (hour == "0") {
      hour = 12;
    }

    // 3. Use the variable as required
    console.log("Hour + " + i + ": " + hour + timeAmPm);
  }

答案 1 :(得分:0)

略有不同的解决方案。可以使用EITHER三元或if(条件),但不能同时使用。

const hr = (hour) => {
  let ampm = (hour < 12) ? 'am' : 'pm';
// ternary solution
  let hr = ((hour % 12) == 0) ? 12 : hour%12;
// alternate solution
//  let hr = (hour % 12);  if (hr == 0) hr = 12;
  return hr+ampm;
}

for (let hour=0; hour<24; hour++) {
  console.log('military: ',hour,'analog:',hr(hour));
}