如何检查输入时间是否在开始时间和结束时间之间

时间:2017-03-15 08:38:18

标签: javascript node.js

我想构建一个API,其中将采用当前时间(即晚上7:30),并将其与开始时间(即早上6点)和关闭时间(即晚上8点)进行比较。如果时间落在这两个限制之间,则输出中将给出正响应。

是否有任何日期功能,我可以通过它来执行此操作。如果不是,检查小时和分钟比较这些限制的有效方法是什么?

4 个答案:

答案 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)

有一个模块moment用于日期和时间操作。如果你想找到两次之间的差异,那就去吧!

android:inputType="number"

以及您可以在文档中找到的更多用途。

答案 3 :(得分:1)

您可以尝试多种方法。一种是通过提供开始和结束时间来使用日期,例如

&#13;
&#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 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;
&#13;
&#13;

另一种方法是使用日期的分钟部分:

&#13;
&#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;
&#13;
&#13;