我想计算2个日期时间字符串之间的时差.
我有2个输入,其中输入字符串类似于"1:00 PM",第二个输入"3:15 PM".我想知道时差.所以对于上面的例子,我想显示3.15
我做了什么:
new Date("1970-1-1 13:00:00")码:
var total = Math.round(((new Date("1970-1-1 " + end_time) -
new Date("1970-1-1 " + start_time) ) / 1000 / 3600) , 2 )
Run Code Online (Sandbox Code Playgroud)
但是总数总是返回整数而不是小数,所以"1:00 PM"和"3:15 PM"之间的差异是2而不是2.15.
我也试过这个(使用jQuery,但这是无关紧要的):
$('#to_ad,#from_ad').change(function(){
$('#total_ad').val( getDiffTime() );
});
function fixTimeString(time){
var hours = Number(time.match(/^(\d+)/)[1]);
var minutes = Number(time.match(/:(\d+)/)[1]);
var AMPM = time.match(/\s(.*)$/)[1];
if(AMPM == "PM" && hours<12) hours = hours+12;
if(AMPM == "AM" && hours==12) hours = hours-12;
var sHours = hours.toString();
var sMinutes = minutes.toString();
if(hours<10) sHours = "0" + sHours;
if(minutes<10) sMinutes = "0" + sMinutes;
return sHours + ':' + sMinutes + ':00';
}
function getDiffTime(){
var start_time = fixTimeString($('#from_ad').val());
var end_time = fixTimeString($('#to_ad').val());
var start = new Date("1970-1-1 " + end_time).getTime(),
end = new Date("1970-1-1 " + start_time).getTime();
return parseInt(((start - end) / 1000 / 3600, 10)*100) / 100;
}
Run Code Online (Sandbox Code Playgroud)
但total_ad输入仅显示整数值.
我该如何解决这个问题?
Math.round四舍五入到最接近的整数,改为乘法和除法
var start = new Date("1970-1-1 " + start_time).getTime(),
end = new Date("1970-1-1 " + end_time).getTime();
var total = (parseInt(((start-end) / 1000 / 3600)*100, 10)) / 100;
Run Code Online (Sandbox Code Playgroud)
当您取时间 15:15:00 并减去 13:00:00 时,您剩下 2.15 小时,而不是 3.15,即使不确保只有两位小数,此示例也会返回 2.15,但对于其他时间情况可能并非如此。
您也可以使用toFixed(2),但这将使您得到 3.00 而不是 3 等。
| 归档时间: |
|
| 查看次数: |
8540 次 |
| 最近记录: |