我想制作一个显示当前时间的网页。当" 12小时格式"单击按钮,12小时内的时间将显示在div区域中。当" 24小时格式"单击按钮,时间将显示在div区域的24小时时间内。目前,单击这些按钮时没有任何反应。救命啊!
HTML:
<html>
<head>
<title>Clock</title>
<script type="text/javascript" src="clock.js"></script>
</head>
<body>
<div id="textbox"></div>
<br/>
<button type="radio" onclick="getTwelveHrs()">12 Hour Format</button>
<button type="radio" onclick="getTwentyFourHrs()">24 Hour Format</button>
</body>
</html>
JavaScript的:
function getTwelveHours{
if (i < 10) {
i = "0" + i;
}
return i;
}
function startTime() {
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
m = checkTime(m);
s = checkTime(s);
document.getElementById('textbox').innerHTML = h + ":" + m + ":" + s;
t = setTimeout(function () {
startTime()
}, 500);
}
startTime();
}
function getTwentyFourHrs() {
var today=new Date();
var h=today.getHours();
var m=today.getMinutes();
var s=today.getSeconds();
m = checkTime(m);
s = checkTime(s);
document.getElementById('textbox').innerHTML = h+":"+m+":"+s;
var t = setTimeout(function(){startTime()},500);
}
function checkTime(i) {
if (i<10) {i = "0" + i};
return i;
}
答案 0 :(得分:12)
为什么不使用像Moment.js这样的库来为你做这件事。
H, HH 24 hour time
h, or hh 12 hour time (use in conjunction with a or A)
所以在使用moment.js时只需在JavaScript中使用此代码
moment()方法以特定格式返回当前日期。因此,当用户单击该按钮时,您可以在每个按钮上调用以下方法
moment().format("YYYY-MM-DD HH:mm"); // 24H clock
moment().format("YYYY-MM-DD hh:mm"); // 12H clock
Havn对此进行了测试,但它应该可行
答案 1 :(得分:0)
说实话,我并不完全确定你是如何做到这一点的,但我想我明白你想要发生什么。
尝试一下:
window.onload = function() {
var h, m, s;
document.getElementById('twelveHrs').style.display = 'none';
document.getElementById('twentyFourHrs').style.display = 'none';
getTwelveHrs();
getTwentyFourHrs();
function getTwelveHrs() {
var tag = 'AM';
checkTime();
if(h > 12) {
h -= 12
tag = 'PM';
}
document.getElementById('twelveHrs').innerHTML = h + ':' + m + ':' + s + ' ' + tag;
t = setTimeout(function() {
getTwelveHrs()
}, 1000);
}
function getTwentyFourHrs() {
checkTime();
document.getElementById('twentyFourHrs').innerHTML = h + ':' + m + ':' + s;
var t = setTimeout(function() {
getTwentyFourHrs()
}, 1000);
}
function checkTime() {
var today = new Date();
h = today.getHours();
m = today.getMinutes();
s = today.getSeconds();
if(h < 10)
h = '0' + h;
if(m < 10)
m = '0' + m;
if(s < 10)
s = '0' + s;
return h, m, s;
}
}
function displayTwelveHrs() {
document.getElementById('twentyFourHrs').style.display = 'none';
document.getElementById('twelveHrs').style.display = '';
}
function displayTwentyFourHrs() {
document.getElementById('twelveHrs').style.display = 'none';
document.getElementById('twentyFourHrs').style.display = '';
}
然后将您的HTML替换为:
<div id="twelveHrs"></div>
<div id="twentyFourHrs"></div>
<br />
<button type="radio" onclick="displayTwelveHrs()">12 Hour Format</button>
<button type="radio" onclick="displayTwentyFourHrs()">24 Hour Format</button>
基本上,当页面加载时,它会启动时钟并隐藏相应的div
标记。然后单击一个按钮,它将显示隐藏另一个所需的div
。
答案 2 :(得分:0)
与其他人达成共识,该代码是有问题的,但是对于时间转换部分-也许您可以使用JavaScript内置函数来完成类似这样的简单操作:
12小时格式:
let formattedTime = new Date().toLocaleTimeString('en-US');
console.log(formattedTime)
24小时制:
let currentDateTime = new Date();
let formattedTime = currentDateTime.getHours() + ":" + currentDateTime.getMinutes() +":" + currentDateTime.getSeconds();
console.log(formattedTime)
答案 3 :(得分:0)
可以使用moment js(一个执行时间和日期操作的良好库)来获得12小时格式。
moment()。format('YYYY-MM-DD,hh:mm:ss A')
其中Post或ante meridiem (请注意,字符a p的唯一一个也被视为有效)
Moment Js的链接:-
答案 4 :(得分:0)
由于工作截止日期已经到来,而现在真的迫在眉睫,所以我决定回答这个已有5年历史的问题。
大多数人都建议使用Moment.js库,这确实很好,因为在大多数情况下,毫无意义地重新发明轮子,并且每周可以下载9,897,199个npm来信任一个库毫无疑问是明智的选择。
但是,由于唯一基于OP代码的答案提供解决方案似乎存在一些错误;我想谦虚地提出我的解决方案:
const FORMATS = {
TwelveHours: 12,
TwentyFourHours: 24
}
class Clock {
format = FORMATS.TwentyFourHours;
constructor(clockDivId) {
this.clockDivId = clockDivId;
this.clockInterval = setInterval(() => {
document.getElementById(clockDivId).innerHTML = this.getCurrentTime().format(this.format);
}, 500)
}
getCurrentTime() {
let today = new Date();
return new Time(today.getHours(), today.getMinutes(), today.getSeconds());
}
switchTo12HourFormat() {
this.format = FORMATS.TwelveHours
}
switchTo24HourFormat() {
this.format = FORMATS.TwentyFourHours
}
destroy() {
clearInterval(this.clockInterval);
}
}
class Time {
constructor(hours, minutes, seconds) {
this.hours = hours;
this.minutes = minutes;
this.seconds = seconds;
}
format(type) {
switch (type) {
case FORMATS.TwentyFourHours: {
return this.print(this.hours)
}
case FORMATS.TwelveHours: {
let tag = this.hours >= 12 ? 'p.m' : 'a.m';
let hours = this.hours % 12;
if (hours == 0) {
hours = 12;
}
return this.print(hours) + ' ' + tag;
}
}
}
//private
to2Digits(number) {
return number < 10 ? '0' + number : '' + number;
}
print(hours) {
return this.to2Digits(hours) + ':' + this.to2Digits(this.minutes) + ':' + this.to2Digits(this.seconds);
}
}
let clock = new Clock("clock");
<html>
<head>
<title>Clock</title>
</head>
<body>
<div id="clock"></div>
<br/>
<button onclick="clock.switchTo12HourFormat()">12 Hour Format</button>
<button onclick="clock.switchTo24HourFormat();">24 Hour Format</button>
</body>
</html>
哦,不,哦,不行!我已经写了“打印”而不是“ this.print”,并且已经在谷歌浏览器中运行了。
基本上,UI被打印对话框阻止了,我丢失了所有代码,不得不再次编写它,现在我要回家睡一会儿了,也许是一集HIMYM。