我想构建一个API,其中将采用当前时间(即晚上7:30),并将其与开始时间(即早上6点)和关闭时间(即晚上8点)进行比较。如果时间落在这两个限制之间,则输出中将给出正响应。
是否有任何日期功能,我可以通过它来执行此操作。如果不是,检查小时和分钟比较这些限制的有效方法是什么?
答案 0 :(得分:2)
您可以将字符串时间表示转换为数字并进行比较; 试试这个;
function timeToNumber(timeString) {
var t = timeString.split(" ");
var offset = 0;
if (t[1] == "PM") {
offset = 12;
}
var hm = t[0].split(":");
var hours = Number(hm[0]) + offset;
return hours * 100 + Number(hm[1]);
}
function timeCompare(min, max, ref) {
return (timeToNumber(min) <= timeToNumber(ref)) && (timeToNumber(ref) <= timeToNumber(max));
}
var rangeMin = "6:00 AM";
var rangeMax = "8:00 PM";
var reference = "7:30 PM"
console.log(timeCompare(rangeMin, rangeMax, reference))
请注意;这仅适用于您的时间范围限制之间没有日期变化的情况。如果您将参考与这些范围进行比较,请使用完整的日期时间而不仅仅是时间。
答案 1 :(得分:1)
public class CompositeItemReader implements ItemCountAware, ItemReader<String> {
private ItemReader<String> itemReader;
private int count = 1;
private final LinkedList<String> files = new LinkedList<>();
public ItemReader<String> getItemReader() {
return itemReader;
}
public void setItemReader(ItemReader<String> itemReader) {
this.itemReader = itemReader;
}
@Override
public String read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
return readFile();
}
private String readFile()
throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
if (files.size() == 0) {
final String item = itemReader.read();
if (item == null) {
return null;
} else {
Path path = Paths.get(item);
if (Files.isDirectory(path)) {
files.addAll((Collection<? extends String>) Files.walk(path, 1).map(Path::toString)
.collect(Collectors.toList()));
} else {
files.add(path.toString());
}
}
}
return files.poll();
}
@Override
public void setItemCount(int count) {
this.count = count;
}
}
此代码在20:05不起作用,因为@RobG提到所以我在分钟内更改比较时间。谢谢@RobG。
var today = new Date().getHours();
if (today >= 6 && today <= 20) {
alert('good time');
} else {
alert('bad time')
}
答案 2 :(得分:1)
答案 3 :(得分:1)
您可以尝试多种方法。一种是通过提供开始和结束时间来使用日期,例如
/* Return true if date is between startTime and endTime, otherwise false.
** @param {string} startTime - in format HH:mm
** @param {string} endTime - in format HH:mm
** @param {Date} date - date to compare, default is now
** @returns {boolean}
*/
function inTime(startTime, endTime, date) {
function toMins(v) {
v = v.split(':');
return v[0]*60 + +v[1];
}
var now = new Date();
startTime = new Date(+now).setHours(0, toMins(startTime), 0, 0);
endTime = new Date(+now).setHours(0, toMins(endTime), 0, 0);
return now >= startTime && now <= endTime;
}
console.log('Is it between 6am and 8pm? ' + inTime('6:00','20:00'));
&#13;
另一种方法是使用日期的分钟部分:
/* Return true if date is between startTime and endTime, otherwise false.
** @param {string} startTime - in format HH:mm
** @param {string} endTime - in format HH:mm
** @param {Date} date - date to compare, default is now
** @returns {boolean}
*/
function inTime2(startTime, endTime, date) {
function toMins(v) {
v = v.split(':');
return v[0] * 60 + +v[1];
}
// ms since midnight
var ms = new Date() - new Date().setHours(0,0,0,0);
return ms >= toMins(startTime)*6e4 && ms <= toMins(endTime)*6e4;
}
console.log('Is it between 6am and 8pm? ' + inTime2('6:00', '20:00'));
&#13;