【问题标题】:How to get ymd by substring with JavaScript如何使用 JavaScript 通过子字符串获取 ymd
【发布时间】:2019-07-16 08:13:00
【问题描述】:

用这段代码获取ymd:

var ymd = '20190716';
var year = ymd.substring(0, 4);
var month = ymd.substring(4, 2);
var day = ymd.substring(6, 2);

console.log(year);
console.log(month);
console.log(day);

我认为这是从索引到长度获取子字符串的正确方法。所以...

想要:

2019
07
16

但是得到了:

2019
19
1907

为什么?

【问题讨论】:

  • 如果“start”大于“end”,则交换两个参数:

标签: javascript


【解决方案1】:

查看docs

substring() 方法返回字符串的开始和结束索引之间的部分,或者到字符串的结尾。

如果 indexStart 大于 indexEnd,则 substring() 的效果就像两个参数交换了一样。

所以当你传递4, 26, 2 时,你是说你希望结束索引开始索引之前,所以参数被切换,你得到索引2到 4,索引 2 到 6。

也许你想要substr,它可以满足你的期望:

substring() 的参数表示开始和结束索引,而 substr() 的参数表示开始索引和返回字符串中要包含的字符数。

var ymd = '20190716';
var year = ymd.substr(0, 4);
var month = ymd.substr(4, 2);
var day = ymd.substr(6, 2);
console.log(year);
console.log(month);
console.log(day);

但它(有点)被弃用了。我更喜欢substringslice,并通过indicies。

如果 indexStart 大于 indexEnd,则 substring() 方法交换它的两个参数,这意味着仍然返回一个字符串。如果是这种情况, slice() 方法会返回一个空字符串。

slice 的行为更直观一点 IMO。

【解决方案2】:

substring()的第二个参数不是你想得到的子串的长度,而是结束索引。

所以substring(4,2) 从索引 4 开始,到 2 结束。给你“19”

【讨论】:

  • 另一方面,.substr() 接受起始索引和长度。
  • @AKX substr 已弃用。 slice 是更好的选择
  • @adiga 虽然 .slice() 也有结束索引作为第二个参数
  • @BasSlagter 是的。你必须做str.slice(index, index + length)。我喜欢它,因为我不必每次都用谷歌来检查它是 substringsubString 还是 substr。它的行为与Array.prototype.slice 完全一样
【解决方案3】:

你也可以使用 JavaScript 正则表达式:

const date = "20190716";
const pattern = /(\d{4})(\d{2})(\d{2})/;
[result, year, month, day] = date.match(pattern);

console.log(year, month, day);

第一个捕获组 (\d{4})

  • \d{4} 匹配一个数字(等于 [0-9])
  • {4} Quantifier — 精确匹配 4 次

第二个捕获组 (\d{2})

  • \d{2} 匹配一个数字(等于 [0-9])

  • {2} 量词——精确匹配 2 次​​p>

第三个捕获组 (\d{2})

  • \d{2} 匹配一个数字(等于 [0-9])

  • {2} 量词——精确匹配 2 次​​p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多