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 打败了我,给他投票吧
我尝试以 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 打败了我,给他投票吧