通过数组获取剩余的开放时间

问题描述 投票:-1回答:2

我正在尝试创建一个倒计时,以获取关闭我的商店之前的剩余时间

// 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?

该线路有问题,因为这给了我错误的剩余时间...

javascript time countdown hour
2个回答
0
投票

一个小时的0.36(十进制值)等于21.6(≈22)分钟。

将十进制转换为分钟很简单:60*decimal。或(60*decimal).toFixed(0)(60*decimal).round()如果需要一个整数。

此外,请记住,JS使用设备的时间。今天,大多数设备都同步时间,但是如果您不想依靠它,则应该从服务器上获取时间(例如,在预处理时将其存储在JS变量中,例如var time=<?=time()?>;)。


0
投票

如果要将当前时间作为字符串,则必须:

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或小时和分钟的首选单独逻辑,如果需要,则不会转换为小数,甚至使用秒。

© www.soinside.com 2019 - 2024. All rights reserved.