如何使用JavaScript通过子字符串获取ymd

时间:2019-07-16 08:13:00

标签: javascript

使用此代码获取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

为什么?

3 个答案:

答案 0 :(得分:5)

检查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并传递标记。

  

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

slice的行为是更直观的IMO。

答案 1 :(得分:3)

substring()的第二个参数不是您想要获取的子字符串的长度,而是结束索引。

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

答案 2 :(得分:1)

您还可以使用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}量词-精确匹配4次

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

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

  • {2}量词-精确匹配2次

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

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

  • {2}量词-精确匹配2次