【问题标题】:JavaScript looping through JSON with jQuery and converting yyyy-mm-dd to timestamp, adding to variableJavaScript 通过 jQuery 循环 JSON 并将 yyyy-mm-dd 转换为时间戳,添加到变量
【发布时间】:2014-09-06 16:21:02
【问题描述】:

我在下面编写了从 GET 路由获取 JSON 的代码。然而,这相当简单,当我加载页面并检查控制台时,它正在记录 0 以获取 records 并记录 NaN 以获取 (total_inforce - total_submit) / records;

这可能是什么问题?我已经检查并验证了添加的值是正确的。

var total_submit = 0;
var total_inforce = 0;  
var records = 0;        

$.ajax({
    url: '/portal/data',
    type: 'GET',
    success: function(result) {
        $.each(result, function(key, value) {
            if(value.inforce_date_c != null && value.submitted_date_c != null) {
                var inforce_date = value.inforce_date_c;
                var submit_date = value.submitted_date_c;

                total_inforce += new Date(inforce_date).getTime() / 1000;
                total_submit += new Date(submit_date).getTime() / 1000;
                records += 1;
            }
        });
    }
});

计算最终结果的片段:

console.log((total_inforce - total_submit) / records);

以下是 JSON 数据的一些示例:

[
    {
        "inforce_date_c": "2014-05-02",
        "submitted_date_c": "2014-03-19"
    }
]

【问题讨论】:

  • 你能提供 JSON 吗?
  • 请注意,Firefox 和 Chrome 都会将看起来像 (yyyy-mm-dd) 的日期解释为 UTC,而不是本地时区。
  • 你能把计算的代码贴出来吗?
  • 哪里有console.log?
  • console.log 不是为了便于阅读。不过我把它们都放了。

标签: javascript jquery json date


【解决方案1】:

我认为这可能是一个问题,因为您正在进行 aSync 调用,并且您可能在进行 get 调用后立即记录值,这是在 success 函数执行之前。

另外,请尝试替换此行:

if(value.inforce_date_c != null && value.submitted_date_c != null) {

有了这个:

if(value.inforce_date_c !== undefined && value.submitted_date_c !== undefined) {

编辑

好吧,我只能想到 2 个可能的问题:

1) 您已经将日期作为日期获取,因此您无需执行new Date(...)

2) 您在期望得到“YYYY-MM-DD”的地方得到错误的格式值,如果问题是第二种情况,请尝试使用此代码(但首先,请确保您收到的日期是字符串而不是日期):

  function parseMyDate(date){
      var dSplit = date.split("-");
      if(dSplit.length!=3)
        return null;
      var year = pareseInt(dSplit[0]);
      var month = pareseInt(dSplit[1]);
      var day = pareseInt(dSplit[2]);

      if(isNaN(year) || isNaN(month) || isNaN(day))
        return null;

      return new Date(year, month, day);
  }
    $.ajax({
        url: '/portal/data',
        type: 'GET',
        success: function(result) {
            $.each(result, function(key, value) {
                if(value.inforce_date_c !== undefined && value.submitted_date_c !== undefined) {
                    var tinforce = parseMyDate(value.inforce_date_c);
                    var tsubmit = parseMyDate(value.submitted_date_c);
                    if(tinforce!==null && tsubmit!==null){
                          total_inforce += tinforce.getTime()/1000;
                          total_submit += tsubmit.getTime()/1000;
                          records++;
                    }
                }
            });
        }
    });

【讨论】:

  • 仍然返回 NaN 并在控制台中记录了许多 0。我假设这是因为它包含 null 的值。
  • 当我将console.log(new Date(inforce_date).getTime() / 1000); 放在var submit_date = ... 下面时,它会正确返回时间戳。不确定这是否有帮助。它似乎只是没有添加。
  • @asgwar12 您是在检查“成功”处理程序 inside 还是 outsiderecords 值?如果在外面,那是你的问题。
  • @Josep 与!= null 比较就像比较不等于nullundefined
  • 为什么会有问题?我在外面声明变量,在循环中添加,结束循环,在外面记录。
猜你喜欢
  • 2019-08-06
  • 2013-03-24
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
相关资源
最近更新 更多