JavaScript循环通过Json日期

时间:2015-11-18 00:55:26

标签: javascript html json

我正在尝试使用JavaScript循环遍历具有时间段(开始日期/时间和结束日期/时间)的json文件,并检查现在(当前日期时间)是否落在此列表中的任何时间段之间。

以下是我的代码,但无法得到我错的地方。有什么帮助吗?

<html>
<script type="text/javascript">
    var data = {
        "period": {
            "startend": [{
                "startDate": "2015-11-17 15:43:37",
                "endDate": "2015-11-18 19:43:37"
            }, {
                "startDate": "2015-12-17 19:43:37",
                "endDate": "2016-01-17 19:43:37"
            }, {
                "startDate": "2015-04-17 19:43:37",
                "endDate": "2015-04-18 19:43:37"
            }]
        }
    }

    var periodArray = data.period.startend;
    var curDate = new Date();
    var datetime = curDate.getFullYear() + '-' + curDate.getMonth() + '-' + curDate.getDate() + ' ' + curDate.getHours() + ':' + curDate.getMinutes() + ':' + curDate.getSeconds();

    for (i = 0; i < periodArray.length ; i++) {
        var obj = periodArray[i]
            if (datetime > obj.startDate && datetime < obj.endDate){
                alert('Falls within period');
            } else {
                alert('Not within any period');
            }
    }
</script>

2 个答案:

答案 0 :(得分:3)

基本思想是将日期字符串转换为实际的Date对象,以便将它们与当前日期(new Date())进行比较。让我们首先定义一个辅助函数,该函数在初始化时关闭当前日期,生成一个以String或Date形式获取开始日期和结束日期的函数,并且当且仅当关闭当前日期是在范围内。

<强>定义

// () -> (([String|Date] * [String|Date]) -> Boolean)
// When initialized, closes over the current date and returns
// a predicate on String or Date objects. 
function includesNow() {
  var curDate = new Date();
  return function(start, end) {
    var startDate = (typeof start === "string")
      ? new Date(start) : start;
    var endDate = (typeof end === "string")
      ? new Date(end) : end;
    return (curDate > startDate) && (curDate < endDate);
  };
}

<强>使用。

借助辅助函数,我们可以非常轻松地过滤&#34;当前&#34;日期:

// Get the list of (date string) objects.
var allDates = data.period.startend;

// Capture the current date, returning the date range comparator.
var comparator = includesNow();

// Get the list of those (date string) objects `obj`
// that satisfy `comparator(obj.startDate, obj.endDate) === true`.
var currentDates = allDates.filter(function(obj) {
  return comparator(obj.startDate, obj.endDate);
});

// This is a function of current date, so will be empty at some point.
currentDates[0];
// => Object {startDate: "2015-11-17 15:43:37", endDate: "2015-11-18 19:43:37"}

如果你知道你的对象总是字符串而不是实际的Date对象,那么你可以大大简化includesNow。如果您对封闭范围感兴趣,请务必更换&gt;和&lt;分别≥和≤。

答案 1 :(得分:0)

JSON日期不是日期对象。这是一个字符串。您正在尝试将Date obj与String进行比较。

如果JSON日期是ISO格式的日期,您可以这样做:

#input values needed
A = input("Enter a value for the first heater/cooler temp: ")
B = input("Enter a value for the second heater/cooler temp: ")
T1 = input("Enter a value for the first initial plate temp: ")
T2 = input("Enter a value for the second initial plate temp: ")
#the stabilizing criterion value


matrix = []
for row in range(0,6):
    matrix.append([])
    for column in range(0,9):
        matrix[row].append(column)

for row in matrix:
    print(row)

realDate现在有一个js日期对象。不幸的是,在您的示例中,startDate和endDate不是ISO字符串。

这将是最简单/最干净的解决方案。否则,您总是可以获取JSON日期字符串并使用substring()将它们分开,并使用Number()转换年/月/日;然后用那种方式比较它们?