Javascript-将DD:HH:MM:SS转换为毫秒

时间:2018-11-21 19:29:54

标签: javascript time

我见过很多函数可以转换日期,但是找不到关于如何将Days:Hours:Minutes:Seconds转换为毫秒的任何特定方法。

因此,这是我为帮助您而制定的一项基本功能。如果您正在编写秒表,时钟或类似的东西,这将很有用。

3 个答案:

答案 0 :(得分: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}));

答案 1 :(得分:0)

  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. */

答案 2 :(得分:0)

我想一个简单的解决方案是使用Date对象的parse方法,该方法可以返回该对象的毫秒数。所要抓住的是,它是要从UNIX Epoch时间返回时间。

// 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);

PS 我不太理解为什么所有参数都为零的新Date对象返回较大的负值的原因,但是我们必须在代码中加以说明。

编辑:由于每个月的天数与每年的天数之间存在差异,因此最好不要在函数{{1} }。