【问题标题】:Javascript - Convert DD:HH:MM:SS to millisecondsJavascript - 将 DD:HH:MM:SS 转换为毫秒
【发布时间】:2018-11-21 19:29:54
【问题描述】:

我见过很多转换日期的函数,但找不到任何关于如何将 Days:Hours:Minutes:Seconds 转换为毫秒的具体信息。

所以这是我为帮助你们而制作的一个基本功能。如果您正在编写秒表、时钟或类似的东西,这很有用。

【问题讨论】:

    标签: javascript time


    【解决方案1】:

    通常我看到这是在不使用实用程序函数的情况下内联完成的,但如果您要创建一个实用程序,让我们让它可扩展。

    1. 我不同意Array 的论点,很难记住什么代表什么。除非你只做日/时/分/秒,否则这会让人感到困惑。此外,除非您总是使用每个参数,否则这会变得很麻烦。

    2. 零值不正确(任何值传递 0 都会导致不正确)

    const conversionTable = {
      seconds: 1000,
      minutes: 60*1000,
      hours: 60*60*1000,
      days: 24*60*60*1000,
    };
    
    const convertTime = (opts) => 
      Object.keys(opts).reduce((fin, timeKey) => (
        fin + opts[timeKey] * conversionTable[timeKey]
      ), 0)
    
    console.log(convertTime({
      days: 5,
      hours: 4,
      minutes: 2,
      seconds: 19,
    }));
    
    console.log(convertTime({seconds: 1}));

    【讨论】:

      【解决方案2】:
        function convertDhms(d,h,m,s){
          d <= 0 ? d=1 : d=d*24*60*60*1000;
          h <= 0 ? h=1 : h=h*60*60*1000;
          m <= 0 ? m=1 : m=m*60*1000;
          s <= 0 ? s=1 : s=s*1000;
      
          return d + h + m + s;
        }
      

      用法:

      var finalDate = convertDhms(5, 4, 2, 19); /* will convert 5 days, 4 hours, 2 minutes and 19 seconds to miliseconds. Keep in mind that the limit to hours is 23, minutes 59 and seconds 59. Days have no limits. */
      

      【讨论】:

      • 这不会显示 0 天、小时、分钟和秒的 4 毫秒吗?
      • 是的,任何零输入都会破坏这个
      • 如果要添加 0 天、0 小时、0 分钟和 0 秒,为什么要使用它? :)
      • @hodrobond 您可以将值 0 添加到输入中,如果它是
      • convertDhms(0,0,0,1) 打印出1003。在天、小时、分钟或秒中包含 0 会使这不准确...
      【解决方案3】:

      我想一个简单的解决方案是使用 Date 对象的 parse 方法,它返回对象的毫秒数。问题是它的目的是从 UNIX 纪元时间返回时间。

      // see docs for Date constructor
      const baseDate = new Date(0,0,0,0,0,0,0);
      const baseMS = Date.parse(baseDate);
      
      // base milliseconds is not zero
      // it defaults to a day before Jan 1, 1970 in ms
      console.log(baseMS);
      
      function convertToMS(dy,hr,mn,s,ms) {
        const date = new Date(0,0,dy,hr,mn,s,ms);
        const dateMS = Date.parse(date);
        return dateMS - baseMS;
      }
      
      // one day in milliseconds
      console.log(convertToMS(1,0,0,0,0));
      console.log(24 * 60 * 60 * 1000);
      

      P.S.我不太明白为什么一个所有参数都为零的新 Date 对象返回一个很大的负值背后的逻辑,但我们必须在代码中考虑这一点。

      编辑:由于每个月的天数和每年的天数之间存在差异,因此最好不要在函数convertToMS 的输入中输入年份和月份。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-13
        • 2019-12-05
        • 2011-06-08
        • 1970-01-01
        • 2014-02-13
        • 2013-07-11
        相关资源
        最近更新 更多