【问题标题】:Human readable time parser人类可读的时间解析器
【发布时间】:2015-03-18 10:16:32
【问题描述】:

是否有任何插件可以将各种格式的时间转换为可以存储在 DB 中的整数值(秒)?

例子:

  • "30m" => 1800
  • "30" => 1800
  • "2h" => 7200
  • "0.5h" => 1800
  • ".5h" => 1800
  • "1" => 60

如果没有后缀,数字应该被解析为分钟。

【问题讨论】:

  • 系统如何知道30 是分钟,1 是小时?
  • @Cerbrus 好问题。在我的特定情况下(时间跟踪器),最好有这个条件:如果数字小于 10,所有没有后缀(仅限数字)的字符串都应该解释为小时,如果数字大于或等于 10,则应该解释为分钟。跨度>
  • 那么,如果你输入10,想要分钟呢?一般来说,用这样的晦涩规则改变功能是个坏主意。这些规则并没有使它更易于使用。
  • @Cerbrus “如果数字大于或等于 10,则为分钟”。因此,如果您输入 10,它将被解析为分钟。所有小于 10 的数字,例如8 将被解释为小时。对我来说,时间跟踪器很有意义,你永远不会在任何任务上跟踪 8 分钟。
  • 或者,你可以保持一致:"如果字符串包含h,则读取为小时,如果字符串包含m,则读取为分钟,否则读取以秒为单位。”

标签: javascript plugins time time-format


【解决方案1】:

你可以试试这样的:

function parseToSeconds(timeString){
    var seconds = parseFloat(timeString);
    if(timeString.indexOf("m") != -1){
        seconds *= 60;
    }
    if(timeString.indexOf("h") != -1){
        seconds *= 3600;
    }
    return seconds;
}

alert("1: " + parseToSeconds("1") + "\n" +
      "1m: " + parseToSeconds("1m") + "\n" +
      "1h: " + parseToSeconds("1h") + "\n" +
      "1.5: " + parseToSeconds("1.5") + "\n" +
      "1.5m: " + parseToSeconds("1.5m") + "\n" +
      "1.5h: " + parseToSeconds("1.5h"));

这将正确转换您的大多数示例。但是,如果没有指定“格式”30,例如,它将假定字符串已经以秒为单位。

如果你想将参数解释为分钟,如果没有后缀,你可以这样做:

function parseToSeconds(timeString){
    var seconds = parseFloat(timeString);
    if(timeString.indexOf("h") != -1){
        return seconds * 3600;
    }
    return seconds * 60;
}

如果字符串包含h,则根据经过的小时数计算秒数。否则,总是假设“分钟”。

【讨论】:

  • @limonte:我稍微调整了我的答案,以允许它解析缺少参数的字符串。
猜你喜欢
  • 1970-01-01
  • 2012-10-30
  • 2010-11-21
  • 1970-01-01
  • 2018-02-02
  • 2011-07-21
  • 2016-07-05
  • 2017-09-04
  • 2010-11-30
相关资源
最近更新 更多