JavaScript 随机生成 12 小时格式的时间

JavaScript random generate time in 12-hour format

我尝试以 12 小时格式随机生成时间。这是我在 Javascript 中的代码:

randomTime = (hrs, mins) => {
  hrs = Math.round(Math.random()*hrs);
  mins = Math.round(Math.random()*mins);    
  var hFormat = (hrs<10 ? "0" : "");
  var mFormat = (mins<10 ? "0" : "");
  var amPm = (hrs<12 ? "AM" : "PM");
  return String(hFormat+hrs+ ":" +mFormat+mins+ " " +amPm);
}

我执行随机生成时间的部分:

var myDate = new Date();
var hour = myDate.getUTCHours();
var minute = myDate.getMinutes();

var resultTime = this.randomTime(hour, minute);

我尝试循环 30 次,但打印出的 minute 只是 00 或 01 等。小时工作正常,因为我得到了一些值,例如 9.00AM、12.00 PM等

有什么想法吗?

您不应该在回答中混用当前日期。这给出了不完全随机的结果。使用这个:

randomTime = () => {
  hrs = Math.round(Math.random() * 24);
  mins = Math.round(Math.random() * 60);    
  var hFormat = (hrs<10 ? "0" : "");
  var mFormat = (mins<10 ? "0" : "");
  var amPm = (hrs<12 ? "AM" : "PM");
  var is12 = (hrs % 12 === 0);

  return amPm === "AM" && !is12 ? String(hFormat+hrs+ ":" +mFormat+mins+ " " +amPm)
                : "AM" && is12  ? String(12 + ":" +mFormat+mins+ " " +amPm)
                : is12 ? String(hFormat+hrs+ ":" +mFormat+mins+ " " +amPm)
                : String(hFormat+(hrs-12)+ ":" +mFormat+mins+ " " +amPm);

}

var resultTime = this.randomTime();
console.log(resultTime);

注:

进行完全正确的格式化可能会很痛苦,确保它显示 12:03AM 而不是 00:03AM , 例如。这就是为什么,作为一个练习,用 vanilla javascript 手工完成这些是很好的,但是,在生产中,通常更明智的做法是使用像 moment.js.

这样的库

你不应该传递当前时间。您将分钟数限制为函数运行时整点后的当前分钟数。尝试将小时限制为 12,分钟限制为 60。

randomTime = () => {
  hrs = Math.round(Math.random()*12);
  mins = Math.round(Math.random()*60);    
  var hFormat = (hrs<10 ? "0" : "");
  var mFormat = (mins<10 ? "0" : "");
  var amPm = (hrs<12 ? "AM" : "PM");
  return String(hFormat+hrs+ ":" +mFormat+mins+ " " +amPm);
}

var resultTime = this.randomTime();
console.log( resultTime );

编辑 @Sventies 打败了我,给他投票吧