【问题标题】:Javascript 'x days ago' to datetime [closed]Javascript'x天前'到日期时间[关闭]
【发布时间】:2021-08-04 13:46:10
【问题描述】:

我有以下列格式显示日期的字符串:

x minutes/hours/days/months/years ago

我需要使用 javascript / nodejs 将其解析为日期时间格式,例如 2021-08-05T09:44:19.014Z

看来momentjs做不到。

有办法吗?

【问题讨论】:

  • 对不起,我的意思是 javascript/nodejs 不是 python...
  • 简单的正则表达式,匹配它,做数学......
  • 你能举个例子吗?你有什么,你想达到什么?

标签: javascript node.js momentjs


【解决方案1】:

当然有。

这是我创建的一个简单实现,它将诸如“10 小时”(巧合的是“10 小时前”,因为正则表达式在另一端未锚定)之类的字符串转换为几秒钟。

然后您可以从当前日期减去该秒数,或者您喜欢处理的任何事情。

const multipliers = {
  second: 1,
  minute: 60,
  hour: 60 * 60,
  day: 60 * 60 * 24,
  month: 60 * 60 * 24 * 30,
  year: 60 * 60 * 24 * 365,
};

function parseTextDuration(s) {
  var m = /^(.+)\s*(second|minute|hour|day|month|year)/i.exec(s);
  if (!m) throw new Error("invalid string");
  const [, mulStr, unit] = m;
  const mul = parseFloat(mulStr);
  if (isNaN(mul)) throw new Error("invalid number");
  const unitMul = multipliers[unit.toLowerCase()];
  if (!unitMul) throw new Error("invalid unit");
  return mul * unitMul;
}

例子:

> console.log(parseTextDuration("10 months"));
25920000
> console.log(parseTextDuration("3 minutes ago"));
180

【讨论】:

    【解决方案2】:

    这是我的建议

    const methods = {
      minutes: (d,mins) => d.setMinutes(d.getMinutes() - mins),
      hours: (d,hours) => d.setHours(d.getHours() - hours),
      days: (d,days) => d.setDate(d.getDate() - days),
      months: (d,months) => d.setDate(d.getMonth() - months),
      years: (d,years) => d.setDate(d.getMonth() - years)
    }
    const ago = str => {
      const d = new Date()
      let [_,howmany, scale] = [...str.match(/(\d+) (\w+)\b/)]
      scale = scale.endsWith("s") ? scale : `${scale}s`
      return new Date(methods[scale](d,howmany));
    }
    
    const str = "10 minutes ago"
    
    console.log(ago(str))

    【讨论】:

    • 似乎有一些复制粘贴错误。 setDate() * 3, getMonth() * 2?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多