比较JavaScript中的字符串 - 逻辑错误?

时间:2014-12-10 13:42:16

标签: javascript

我正在尝试构建一个简单的时间解析器,用于说明事情何时发布。如果它在一小时前减少了 - 它说的是#1;少于一小时前"所以 - 你明白了。

为此,我使用了JavaScript!这是我的开始:

var TimeMachines = {
  adjustTime: function(el) {
    var current = new Date(),
        day = current.getDate(),
        month = current.getMonth() + 1,
        year = current.getFullYear(),
        hour = current.getHours(),
        minutes = current.getMinutes();

    var sameDay,
        sameHour,
        sameMinute;

    var hourAgo,
        fourHoursAgo,
        sixHourAgo;

    if(day < 10) {
      day = '0'+day;
    }

    if(month < 10) {
      month = '0'+month;
    }

    if(hour < 10) {
      hour = '0'+hour;
    }

    if(minutes < 10) {
      minutes = '0'+minutes;
    }

    el.each(function() {
      var fullDate = $(this).text(),
          separatedDate = fullDate.split(' '),
          separatedDay = separatedDate[0],
          separatedHour = separatedDate[1],
          onlyHour = separatedHour.split(':');

      // check if day is the same
      if((day+'.'+month+'.'+year) === separatedDay) {
        sameDay = true;
      }

      if(hour == onlyHour[0]) {
        sameHour = true;
      }

      // if same hour
      if(sameHour && sameDay) {
        el.text('mniej niż godzinę temu')
      }

      if(sameHour && (parseInt(minutes) - parseInt(onlyHour[1]) <= 30)) {
        el.text('przed chwilą')
      }

      // if same day
      if(sameDay) {
        el.text('dzisiaj');
      }

    });
  };
}

$(document).ready(function() {
  TimeMachines.adjustTime($('.datetime'));
});

HTML:

<time class="datetime">10.12.2014 13:00</time>

问题在于比较。它始终显示dzisiaj,因此看起来它会在if(sameDay){}之后停止。

如何正确定位我的例外情况?

1 个答案:

答案 0 :(得分:2)

在功能结束时,你有一个if语句,将文本设置为&#39; dzisiaj&#39;如果sameDay为真,则无论其他条件是否为真,都会发生这种情况。

你可以使用else语句raina77ow建议:

// if same hour
if(sameHour && sameDay) {
    el.text('mniej niż godzinę temu')
}

else if(sameHour && (parseInt(minutes) - parseInt(onlyHour[1]) <= 30)) {
  el.text('przed chwilą')
}

// if same day
else if(sameDay) {
  el.text('dzisiaj');
}

或者你可以使用早期的回复声明:

// if same hour
if(sameHour && sameDay) {
  el.text('mniej niż godzinę temu')
  return;
}

if(sameHour && (parseInt(minutes) - parseInt(onlyHour[1]) <= 30)) {
  el.text('przed chwilą')
  return;
}

// if same day
if(sameDay) {
  el.text('dzisiaj');
  return;
}