我正在尝试创建一个倒计时,以获取关闭我的商店之前的剩余时间
// My array for the opening hours :
var openTime = [
{ open : 9, close : 17},
{ open: 9, close : 18 },
{ open: 9, close : 18 },
{ open: 9, close : 18 },
{ open: 9, close : 18 },
{ open: 9, close : 18 },
{ open: 10, close : 16.5 }
]
var current = new Date();
var day = current.getDay();
var currentTime = current.getHours() + (current.getMinutes() / 60);
var remainTime = 0;
if (openTime[day].open >= 0 && openTime[day].open < currentTime && openTime[day].close >
currentTime) {
remainTime = (openTime[day].close - currentTime).toFixed(2)
}
console.log("the shop will close in %s hours", remainTime);
但是我对这一行有问题:
var currentTime = current.getHours() + (current.getMinutes()/60);
因为当我执行代码时,例如,实际上是17h22,代码在调试器上告诉我当前时间等于17.36?
该线路有问题,因为这给了我错误的剩余时间...
一个小时的0.36(十进制值)等于21.6(≈22)分钟。
将十进制转换为分钟很简单:60*decimal
。或(60*decimal).toFixed(0)
或(60*decimal).round()
如果需要一个整数。
此外,请记住,JS使用设备的时间。今天,大多数设备都同步时间,但是如果您不想依靠它,则应该从服务器上获取时间(例如,在预处理时将其存储在JS变量中,例如var time=<?=time()?>;
)。
如果要将当前时间作为字符串,则必须:
var currentTime = current.getHours() + ":" + (current.getMinutes() / 60);
但是那不是我想要的。您得到的结果为17.36,因为将17:22转换为十进制基数10而不是60分钟可得到该值(22分钟/ 60 = 0.363636舍入两位数0.36)。如果您想让计时器工作,您可以将小数部分转换为* 60以方便地找到它。使用:
var decimalPart = remainTime % 1;
var remainTimeHours = remainTime - decimalPart;
var remainTimeMin = decimalPart * 60;
当然可以简化它-只是为了说明逻辑-在您的关闭时间内,您已经使用16.5表示16:30或应为16:50->然后是16.83或小时和分钟的首选单独逻辑,如果需要,则不会转换为小数,甚至使用秒。