如何使用日期键计算(javascript)对象的值

时间:2014-01-28 14:31:10

标签: javascript

我有以下简化(javascript)对象,其中属性是日期(在字符串fomat中):

给定对象中日期范围内的随机startdate和enddate,如何编码(有效)计算 - 比如说在这个范围内积累的值?例如,对于以下代码,给定的startdate和enddate的计算结果应为12(3 + 4 + 5)。

var startdate = '2014-01-03';
var enddate = '2014-01-05'
var obj = {};
obj['2014-01-02'] = '2';
obj['2014-01-03'] = '3';
obj['2014-01-04'] = '4';
obj['2014-01-05'] = '5';
obj['2014-01-06'] = '6';

3 个答案:

答案 0 :(得分:0)

您可以循环浏览对象的属性,进行比较,然后添加。

var startdate = '2014-01-04';
var enddate = '2014-01-05';
var arr = {};
arr['2014-01-02'] = '2';
arr['2014-01-03'] = '3';
arr['2014-01-04'] = '4';
arr['2014-01-05'] = '5';
arr['2014-01-06'] = '6';

var total = 0;
for(var p in arr) {
  if(arr.hasOwnProperty(p)) {
      if(new Date(p) >= new Date(startdate) && new Date(p) <= new Date(enddate)) {
        total += parseInt(arr[p], 10);
      }
   }
}

console.log(total);

示例http://jsbin.com/imUdewaJ/1/edit

我确信有更好的方法可以做到这一点,但我不知道如何解析日期对象以进行比较。

- 在下面的评论

中的hasOwnProperty检查中添加了编辑

答案 1 :(得分:0)

有可能是some browsers won't support date1 > date2,因此最好也使用getTime()

function getDate(date) {
  return new Date(date).getTime();
}

function getTotal(start, end) {
  var total = 0;
  for (var k in obj) {
    var current = getDate(k);
    if (current >= start && current <= end) {
      total += parseInt(obj[k], 10);
    }
  }
  return total;
}

var start = getDate(startdate);
var end = getDate(enddate);

console.log(getTotal(start, end)); // 12

答案 2 :(得分:0)

在处理日期时,您可能希望使用第三方工具来处理浏览器兼容性。 Momentjs对于约会是一个很好的。

momentjs的解决方案:

var startdate = moment('2014-01-03');
var enddate = moment('2014-01-05');

var obj = {};
obj['2014-01-02'] = '2';
obj['2014-01-03'] = '3';
obj['2014-01-04'] = '4';
obj['2014-01-05'] = '5';
obj['2014-01-06'] = '6';

var strDate;
var total = 0;
for (strDate in obj) {
    if (obj.hasOwnProperty(strDate)) {
        var date = moment(strDate)
        if (date.diff(startdate, 'days')>=0 && date.diff(enddate, 'days')<=0) {
            total += parseInt(obj[strDate], 10);
        }
    }
}

console.log(total);