我有一个跟踪当地时间的功能。我正在使用new Date();
对象获取本地小时,分钟和秒。
我还希望用户提供一个函数必须在特定时间启动的输入。用户的输入是字符串(我不希望用户使用Date();
对象,因为并非所有用户都可以编程)。例如:
输入用户:
var timeStart = "10:08:30";
实时转换为字符串:
var sTime = todayHours + ':' + todayMinutes + ':' + todaySeconds;
当两者相等时:
if(sTime == timeStart )
{
//function when equals time
//This function has a timeout, so it will run infinite times
var timeOutId = setTimeout(function()
{
//call functie
}, 10000); //every 10 seconds as example
}
好的,这项工作很好。我只能在相同或不相同的情况下比较字符串。但是要使它更复杂一些:我还希望用户给出结束时间,何时起作用必须停止:
输入用户:
var timeEnd = "11:08:30";
实时转换为字符串:
var sTime = todayHours + ':' + todayMinutes + ':' + todaySeconds;
当两者相等时:
if( sTime == timeEnd)
{
//function when equals time
//calls the timeout id and stops it
clearTimeout(timeOutId);
}
<小时/> 现在这个工作正常!但是现在你知道我想要做什么我想知道我是否可以用某种方式做:
if(sTime >= timeStart && sTime <= timeEnd)
{
//timeout will only be set when it's in between the given time
setTimeout(function()
{
//call functie
}, 10000); //every 10 seconds as example
}
我有一种方法可以在一个激动的日期时间内转换我的字符串时间(使用2位数方法),这样我可以按时比较它吗?
我的时间仅使用[小时,分钟和秒],这会导致问题,因为未定义日期(年,月和日)。
我尝试使用 Momentjs 但它也拒绝使用小时,分钟和秒。或者我可能不会如何做到这一点。
我想要使用的方法似乎更容易,因为我不必定义何时取消timeOut
。
感谢任何帮助!
Ps我真正需要完成的是将字符串时间转换为 unix时间戳
(当然也欢迎其他方法)。< / p>
答案 0 :(得分:1)
不要知道moment.js,但你仍然可以使用基本的parseInt来提取时间,把它变成整数,这样你就可以把它与另一个进行比较:
function stringtime_to_seconds(aString){
var time,a = aString.split(":");
switch(a.length){
default: // 3 , you'll need to handle other cases
time = parseInt(a[0])*3600+parseInt(a[1])*60+parseInt(a[2]);
}
return time;
}
然后你可以比较日期。
答案 1 :(得分:1)
我尝试使用Momentjs,但它也拒绝使用小时,分钟和秒。或者我可能不会如何做到这一点 ...
我真正需要完成的是将字符串时间转换为unix时间戳
您只需提供格式字符串,例如:
// parse the input
var timeStart = "10:08:30";
var m = moment(timeStart,"HH:mm:ss");
// then one of these
var s = m.unix(); // unix time in seconds
var ms = m.valueOf(); // unix time in milliseconds
当然,要获得unix时间,您必须考虑具体日期。使用上述方法,它将使用本地时区的“今天”。如果您的范围超过午夜,例如晚上10点至凌晨2点,这可能是一个问题,因此您可能需要进行调整。
另外,你说你正在做范围比较,如:
if(sTime >= timeStart && sTime <= timeEnd)
您可能不应该使用字符串。但是,您应该使用半开间隔[start,end)
。换句话说:
if(sTime >= timeStart && sTime < timeEnd)
通常当有人说凌晨1点到2点时,他们的意思是凌晨2点超过。