确定此格式的时间戳是否在JavaScript中的特定范围内



我有一组时间戳,其格式如下:Year:Month:Day:Hour:Minute:Second,例如2017:01:01:23:59:59。所有域都是零填充的十进制数字。

我正在尝试编写一个函数来确定给定的时间戳是否在一个范围内:


function isBetween(start, end, toCompare) {
}

例如,isBetween('2017:01:01:23:59:58', "2017:01:02:23:59:58", "2017:01:01:23:59:59")应该返回true,因为"2017:01:01:23:59:59"'2017:01:01:23:59:58'"2017:01:02:23:59:58"之间

我找不到一个干净的方法。有人能帮我吗?

在JavaScript中,Date对象可以很容易地进行比较。然而,正如您可能已经注意到的,您提供的字符串的格式不是可以由JavaScript的Date对象解析的格式,因此我们首先必须解决这个问题。幸运的是,这种格式是非常可预测的。

我首先注意到的是;月份";以及";日期";如果它们是个位数,则前面加一个零。这意味着日期部分总是完全相同数量的字符(10(。因为是这种情况,我们可以使用String.prototype.substring()获取日期的前10个字符,并获取第11个字符后的所有字符以获取时间,同时跳过在中间的冒号。

var datetime = "2017:01:01:23:59:58";
var date = datetime.substring(0, 10);
var time = datetime.substring(11);
console.log("Date: " + date);
console.log("Time: " + time);

既然它们是分开的,我们所需要做的就是用正斜杠替换日期中的冒号,然后将其与用空格分隔的时间连接起来。之后,我们将有一个MM/dd/yyyy hh:mm:ss格式的日期字符串,然后我们可以使用Date类中内置的JavaScript来解析它。

var input = "2017:01:01:23:59:58";
var date = input.substring(0, 10).replace(/:/g, "/");
var time = input.substring(11);
var datetime = date + " " + time;
console.log(new Date(datetime));

现在我们可以将其放入它自己的函数中,然后使用简单的比较来确定toCompare是否在startend之间。

function isBetween(start, end, toCompare) {
var startDate = convertDate(start);
var endDate = convertDate(end);
var compareDate = convertDate(toCompare);
return compareDate > startDate &&
compareDate < endDate
}
function convertDate(input){
var date = input.substring(0, 10).replace(/:/g, "/");
var time = input.substring(11);
var datetime = date + " " + time;

return new Date(datetime);
}
var between = isBetween("2017:01:01:23:59:58", "2017:01:02:23:59:58", "2017:01:01:23:59:59");
console.log(between)

这可能适用于您:

function isBetween(start, end, toCompare) {
start = dateGenerator(start)
end = dateGenerator(end)
toCompare = dateGenerator(toCompare)
if(start <= toCompare && toCompare <= end) return true
return false
}
function dateGenerator(str) {
str = str.split(":")
let date = new Date(`${str[0]}-${str[1]}-${str[2]}`)
date.setHours(str[3],str[4],str[5])
return date.valueOf()
}
const truthy = isBetween('2017:01:01:23:59:58', "2017:01:02:23:59:58", "2017:01:01:23:59:59")
console.log(truthy)

首先获取各个值并相应地添加到JS的Date构造函数中,并相应地设置小时数。为了进行比较,我们可以转换这个unix数字(valueOf(,因此比较起来会更容易。这可能看起来很复杂,但它确实有效。

最新更新