删除日期格式的尾随字符串

时间:2017-01-02 13:08:40

标签: javascript regex string momentjs

我正在使用Moment Duration Format而且很棒。在某些情况下,我无法获得正确的字符串格式。

这些是我当前的字符串输出类型在

之下
var dur = moment.duration(d, "minutes").format("h [hrs] m [min]");
  1. 45分钟
  2. 1小时30分钟
  3. 2小时0分钟
  4. 这些都是正确的输出,我只想更改最终类型。

    当存在小时且分钟 ZERO 时,我想修剪字符串以显示小时数

    所以

    2小时0分钟变为 2小时

    我不确定从正则表达式开始的位置?我认为这可能是实现它的唯一方法吗?

    感谢您的帮助

1 个答案:

答案 0 :(得分:4)

使用包装器函数代替正则表达式,该函数检查对象是否有值,如果没有,则更新格式字符串。

function getFormattedString(duration) {
  var format = "";
  if (duration.hours()) format += "h [hrs] ";
  if (duration.minutes()) format += "m [min] "
  if (duration.seconds()) format += "s [sec] ";
  return duration.format(format)
}

console.log(getFormattedString(moment.duration(20, "minutes")))
console.log(getFormattedString(moment.duration(100, "minutes")))
console.log(getFormattedString(moment.duration(120, "minutes")))
console.log(getFormattedString(moment.duration(3701, "seconds")))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>

更新的代码(通用包装

  • 添加了yeardays
  • 的选项
  • 添加了静态地图以使代码通用
  • 添加了对1 sec10 secs
  • 的处理

function getFormattedDurationString(value, unit) {
  const valueMap = [
    {name:'years', value:'y', unitValue:'yr'},
    {name:'days', value:'d', unitValue:'day'},
    {name:'hours', value:'h', unitValue:'hr'},
    {name:'minutes', value:'m', unitValue:'min'},
    {name:'seconds', value:'s', unitValue:'sec'},
    {name:'milliseconds', value:'s', unitValue:'ms', bypassPlural: true},
  ]

  var duration = moment.duration(value, unit);
  var format = valueMap.reduce(function(p,c){
  var val = duration[c.name]();
  if(val >0){
    p += c.value + " [" + c.unitValue +  (val > 1 && !c.bypassPlural ? "s":"") + "] ";
  }
  return p
}, "")
return duration.format(format)
}

console.log(getFormattedDurationString(20, "minutes"))
console.log(getFormattedDurationString(100, "minutes"))
console.log(getFormattedDurationString(120, "minutes"))
console.log(getFormattedDurationString(3701, "seconds"))
console.log(getFormattedDurationString(3701, "days"))
console.log(getFormattedDurationString(3701, "milliseconds"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>