【问题标题】:Difference between two date in an human readable format人类可读格式的两个日期之间的差异
【发布时间】:2019-05-12 04:27:00
【问题描述】:

我有一个表示日期和现在之间时差的对象(我使用了 Luxon):

{days: -0, hours: -15, minutes: -38, months: -0, seconds: -46.389, years: -0}

我想以人类可读的方式打印这些信息。所以,在这种情况下:

difference is 15 h, 38 min, 46 s

所以,我不会认为数字等于 0,结果应该按年、月、日、小时、分钟、秒进行排序。 更聪明的方法是什么?

【问题讨论】:

  • 你已经尝试过什么?您是否已经有一些代码可供我们查看?
  • @Mathyn 不是真的。但我唯一的想法是以一种非常愚蠢的方式迭代对象
  • 只对对象的属性使用toString()方法?

标签: javascript date luxon


【解决方案1】:

你可以使用这样的东西

function toReadable(obj) {
    var names = {
        days: "d", hours: 'h', minutes: 'min', months: 'm', seconds: 's', years: 'y'
    }
    return Object.keys(obj).reduce((acc, v) => {
        if(obj[v] != 0) acc.push(Math.abs(Math.ceil(obj[v])) + ' ' + names[v]);
        return acc;
    }, []).join(', ')
}

【讨论】:

    【解决方案2】:

    由于您不能保证对象中的顺序,您可以将顺序保留在数组中,并对修改后的名称使用一些逻辑,例如

    function formatPeriod(obj) {
      return ['years','months','days','hours','minutes','seconds'].reduce((acc, key) => {
        let v = parseInt(Math.abs(obj[key])); 
        if (v != 0) acc.push(v + ' ' + key.slice(0,key=='minutes'?3:1));
        return acc;
      }, []).join(', ');
    }
    
    // Example
    var data = {days: -0, hours: -15, minutes: -38, months: -0, seconds: -46.389, years: -0};
    console.log(formatPeriod(data));

    【讨论】:

      猜你喜欢
      • 2011-09-26
      • 2016-10-31
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多