Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算SLA剩余天数/时间_Javascript_Reactjs_Datetime - Fatal编程技术网

Javascript 计算SLA剩余天数/时间

Javascript 计算SLA剩余天数/时间,javascript,reactjs,datetime,Javascript,Reactjs,Datetime,我需要帮助,试图找出如何根据一些规则显示SLA。 我的API返回几分钟的整数值,例如-1491和5836。我的逻辑是错误的。谁能帮帮我吗 规则如下: 如果SLA分钟数>=24小时,则显示天,例如“3天” 如果SLA分钟数少于24小时,则显示小时数和分钟数,例如“3小时4分钟” 如果SLA分钟数小于1小时,则显示分钟数“33分钟” 如果SLA会议记录为-1441,则应返回逾期1天的会议记录;如果会议记录为正数1441,则应返回1天 到目前为止,我得到的是: const items = [{slaM

我需要帮助,试图找出如何根据一些规则显示SLA。 我的API返回几分钟的整数值,例如-1491和5836。我的逻辑是错误的。谁能帮帮我吗

规则如下:

  • 如果SLA分钟数>=24小时,则显示天,例如“3天”
  • 如果SLA分钟数少于24小时,则显示小时数和分钟数,例如“3小时4分钟”
  • 如果SLA分钟数小于1小时,则显示分钟数“33分钟”
  • 如果SLA会议记录为-1441,则应返回逾期1天的会议记录;如果会议记录为正数1441,则应返回1天
  • 到目前为止,我得到的是:

    const items = [{slaMinutesRemaining: 5836}, {slaMinutesRemaining : -1441}]
    
    我循环浏览项目并将项目作为道具传递:

    const SLA = ({item}) => {
    
        const returnDays = (mins) => {
          const calc = Math.floor(mins / 1440);
          return calc > 1 ? `${calc} days` : `${calc} day`;
        };
        
        const returnHoursAndMinutes = (mins) => {
          const hrs = Math.floor(mins / 60);
          const minutes = mins % 60;
          if (mins < 1440) return `${hrs}hrs ${minutes} mins`;
          return mins;
        };
        
        const slaRemaining = (mins) => {
          console.log('minssss', mins);
          const hrs = Math.floor(mins / 60);
          // if null
          if (!mins) return 'N/A';
          let m = mins;
          const isNegative = m < 0;
          if (isNegative) m = Math.abs(isNegative);
          if (m >= 1440) return returnDays(m);
          if (hrs < 1) return m;
          return returnHoursAndMinutes(m);
        };
    
            return (
              <>
                {item.slaMinutesRemaining && item.slaMinutesRemaining < 0 ? (
                  <SlaAlert>
                    {slaRemaining(item.slaMinutesRemaining)}{' '}
                    <OverDueTag>Overdue</OverDueTag>
                  </SlaAlert>
                ) : (
                  <>{slaRemaining(item.slaMinutesRemaining)}</>
                )}
              </>
            );
        }
    
    const SLA=({item})=>{
    const returnDays=(分钟)=>{
    常数计算=数学楼层(分钟/1440);
    返回calc>1?`{calc}天`:`${calc}天`;
    };
    const returnHoursAndMinutes=(分钟)=>{
    常数小时=数学楼层(分钟/60);
    常数分钟=分钟%60;
    如果(分钟<1440)返回`${hrs}hrs${minutes}mins`;
    返回分钟;
    };
    剩余常数=(分钟)=>{
    console.log('minsss',mins);
    常数小时=数学楼层(分钟/60);
    //如果为空
    如果(!分钟)返回“不适用”;
    设m=min;
    常数为负=m<0;
    如果(isNegative)m=Math.abs(isNegative);
    如果(m>=1440)返回天数(m);
    如果(小时数<1)返回m;
    返回时数和分钟数(m);
    };
    返回(
    {item.slamintesraining&&item.slamintesraining<0(
    {slaLeving(item.slaMinutesLeving)}{'}
    逾期的
    ) : (
    {slamentremaining(item.slaminuteslaining)}
    )}
    );
    }
    
    首先,我将删除组件本身的所有计算,以便可以对其进行单元测试。这样,您就知道计算是否正确了

    if (isNegative) m = Math.abs(isNegative);
    
    应该是:

    if (isNegative) m = Math.abs(m);
    
    您还可以简化所有逻辑:

    const slaRemaining = (mins) => {
      if (!mins) {
        // This check is wrong. What happens if the query happens at the exact moment that 0 minutes are left to SLA?
        return 'N/A';
      }
    
      const due = (mins < 0);
      const absMins = Math.abs(mins);
      const days = Math.floor(absMins / 1400);
      const hours = Math.floor(absMins / 60);
      const minutes = absMins % 60;
    
      const label = days
        ? `${days} day${days > 1 ? 's' : ''}`
        : `${hours}hr${hours > 1 ? 's' : ''} ${minutes}min${minutes > 1 ? 's' : ''}`;
    
      return { due, label };
    };
    
    const sla剩余=(分钟)=>{
    如果(!分钟){
    //此检查是错误的。如果查询恰好发生在SLA剩余0分钟的时刻,会发生什么情况?
    返回“不适用”;
    }
    持续时间=(分钟<0);
    常量absMins=数学abs(分钟);
    施工天数=数学楼层(absMins/1400);
    恒时=数学楼层(absMins/60);
    常数分钟=绝对值%60;
    常数标签=天
    ?`${days}day${days>1?'s':''}`
    :`${hours}hr${hours>1's':''}${minutes}min${minutes>1's':''}`;
    返回{到期,标签};
    };
    
    反应代码是否属于您的问题?不确定什么是
    item
    ,等等。item是一个道具,包含slamutesRemaining等属性。我正在尝试解决我发布的规则。这似乎是一个技巧,感谢您简化了它:)
    const isNegative=m<0
    isNegative将是一个布尔值(解释您的答案),这要感谢添加了@ISAE的解释,但我认为这只是一个疏忽,而不是OP错误地使用了
    Math.abs()