我创建了两个文本框,当用户按Tab键时,文本框的值转换为24小时格式时,需要时间作为用户输入 我写了一个方法
function getFormattedTime(value) {
var time = j$.trim(value);
var len = time.length;
var result = "";
var pos = time.indexOf(":");
if (pos < 0) {
pos = time.indexOf(".");
}
if (time.indexOf('m') < 0 && pos < 0 && parseInt(time) > 12
&& parseInt(time) < 12) {
time = time + 'm';
}
if (time.indexOf('m') > 0) {
time = parseFloat(time.substring(0, time.indexOf('m')));
if (isNaN(time)) {
window
.alert("Hours entered is invalid [00:00] or [00.00] or [00h] or [00m]");
return "";
} else {
if (time > 59) {
result = parseInt(time / 60);
result = result + ":" + (time - (result * 60));
} else {
result = "00:"
+ (parseFloat(time) <= 9 ? "0" + time : time);
}
}
return result;
}
var hour = "00";
if (time.charAt(0) == '0') {
hour = '0'
+ (parseFloat(time.substring(1, 2)) ? parseFloat(time
.substring(1, 2)) : '0');
} else {
hour = (parseFloat(time.substring(0, 2)) ? parseFloat(time
.substring(0, 2)) : '00');
hour = (hour > 24 ? 24 : (hour < 10 ? (hour == 0 ? '00' : '0'
+ hour) : hour));
}
var mins = "00";
if (pos != -1) {
if (time.charAt(pos + 1) == '0') {
mins = '0'
+ (parseFloat(time.substring(pos + 2, pos + 3))
? parseFloat(time.substring(pos + 2, pos + 3))
: '0');
} else {
mins = (parseFloat(time.substring(pos + 1, 5))
? parseFloat(time.substring(pos + 1, 5))
: '00');
mins = (mins >= 60 ? 59 : (mins < 10 ? (mins >= 6 ? 59 : mins
+ '0') : mins));
mins = (hour == 24 ? 45 : mins);
}
}
result = hour + ":" + mins;
return result;
}
以下格式正常工作
1。)0 - 00:00 2.)9.3 - 09:30 3.)13.3 - 13:30 4.)9 - 09:00
但是当我进入
1352它应该给我13:52但是它给了13:00 在哪里我做错了任何帮助?答案 0 :(得分:0)
在这种情况下,你将分钟设置为字符串'00'。因此,您要在第二行中多次将字符串与数字进行比较。最终将分钟设置为自己,'00'。
mins = (parseFloat(time.substring(pos + 1, 5)) ? parseFloat(time.substring(pos + 1, 5))
: '00');
mins = (mins >= 60 ? 59 : (mins < 10 ? (mins >= 6 ? 59 : mins. + '0') : mins));
mins = (hour == 24 ? 45 :
答案 1 :(得分:0)
pos
为-1时会发生什么?好吧,当pos
为-1时,您将离开:
var mins = "00";
//...
result = hour + ":" + mins;
pos
如何最终成为-1?好吧,time
不包含冒号或句号的任何时候:
var pos = time.indexOf(":");
if (pos < 0) {
pos = time.indexOf(".");
}
特别是,当mins
为1352时,"00"
将为time
。您的最终else
需要if
分支才能处理此案例没有结肠或时期。
答案 2 :(得分:0)
怎么样
<style>
#time { width:50px; border:0; text-align:right}
select {text-align:right}
</style>
<script>
var mil = false; // use am/pm
window.onload=function() {
var hour = document.getElementById("hour");
var min = document.getElementById("minutes");
var ampm = document.getElementById("ampm");
for (var i=0;i<24;i++) {
var val = i<10&&mil?"0"+i:i;
if (!mil && val>12) val-=12;
hour.options[i]=new Option(val,i);
}
for (var i=0;i<60;i++) {
var val = i<10?"0"+i:i;
min.options[i]=new Option(val,i);
}
hour.onchange=function() {
if (!mil) ampm.innerHTML=(hour.selectedIndex)<12?"am":"pm";
document.getElementById("time").value=hour.options[hour.selectedIndex].text+":"+min.value;
}
min.onchange=function() {
hour.onchange();
}
var now = new Date();
hour.selectedIndex=now.getHours();
min.selectedIndex=now.getMinutes();
hour.onchange();
}
</script>
<select id="hour" name="hour"></select>:<select id="minutes" name="minutes"></select>
<input type="text" id="time" name="time" readonly="readonly" /><!-- hidden or in another form --><span id="ampm"></span>