Javascript日期增量转换到字符串和从字符串转换

Posted

技术标签:

【中文标题】Javascript日期增量转换到字符串和从字符串转换【英文标题】:Javascript date delta conversion to and from string 【发布时间】:2015-11-11 05:34:46 【问题描述】:

我正在尝试从字符串1 year, 5 months and 4 days 中提取年月日数据。

同样,我希望能够将 1/2/4 转换为 1 year, 2 months and 4 days

在这两种情况下,我都想处理 day vs days 或删除天数(如果天数为 0)。

最好的方法是什么?

【问题讨论】:

了解 javascript 正则表达式函数,即String.match() 【参考方案1】:

您可以将 replace() 与回调一起使用

function format(str) 
  return str.replace(/(\d+)\/(\d+)\/(\d+)/, function(m, m1, m2, m3) 
    var s = [];
    if (m1 != 0)
      s.push(m1 + (m1 == 1 ? ' year' : ' years'));
    if (m2 != 0)
      s.push(m2 + (m2 == 1 ? ' month' : ' months'))
    if (m3 != 0)
      s.push(m3 + (m3 == 1 ? ' day' : ' days'))
    if (s.length == 3)
      return s[0] + ', ' + s[1] + ' and ' + s[2];
    else if (s.length == 2)
      return s[0] + ' and ' + s[1];
    else
      return s[0];
  )

document.write(format('1/2/4') +
  '<br>' + format('1/2/0') +
  '<br>' + format('0/2/0') +
  '<br>' + format('1/2/4') +
  '<br>' + format('2/2/4') +
  '<br>' + format('1/21/0') +
  '<br>' + format('0/2/1') +
  '<br>' + format('1/1/1'));

Regex explanation here

更新: 可以使用 replace()join()

进行反向操作

function formatRev(str) 
  return str.replace(/^(?:(\d+)\s+(\w+)\s*,\s*)?(\d+)\s+(\w+)(?:\s+and\s+(\d+)\s+(\w+))?$/ig, function(m, m1, m2, m3, m4, m5, m6) 
    var s = [0, 0, 0];
    s[extract(m2)] = m1;
    s[extract(m4)] = m3;
    s[extract(m6)] = m5;
    return s.join('/');
  )


function extract(str) 
  if (/year/.test(str))
    return 0;
  else if (/month/.test(str))
    return 1;
  else if (/day/.test(str))
    return 2;
  else
    return null;


document.write(formatRev('5 years and 4 days') +
  '<br>' + formatRev('1 year and 2 months') +
  '<br>' + formatRev('2 months') +
  '<br>' + formatRev('1 year, 2 months and 4 days')
);

Regex explanation here

【讨论】:

谢谢:D 反向提取它的最佳方法是什么?例如:1 year and 3 days。我目前正在使用 split 和很多 if-else ,您可以提出更优雅的建议吗? @SudhanshuShekhar 试试(?:(\d+) years?)?\s*(?:(\d+) months?)?\s*(?:(\d+) days?)? 不确定这是否有帮助。

以上是关于Javascript日期增量转换到字符串和从字符串转换的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 把字符串类型转换成日期类型

008.Numpy日期时间和增量

将 Json 日期字符串转换为 JavaScript 日期对象

将Javascript日期字符串转换为PHP日期[重复]

将 .NET 日期/时间格式字符串转换为 Javascript 日期/时间格式字符串

Java 日期格式转 JavaScript 日期格式