2

这可能是一个微不足道的问题,但我正在尝试寻找最有效的方法来做到这一点。

我从一个 servlet 获得了一个格式为“20130914”的字符串,我需要从中创建一个 javascript 日期对象。

据我所知,日期对象接受 ISO 格式的字符串,所以我需要在我的年、月和日期之间添加破折号,例如“2013-09-14”

我可以使用 .splice 函数在年、月和日期之间插入破折号,但我觉得对于这个微不足道的问题必须有一个更简单的解决方案。还是我想多了?

4

4 回答 4

3

你所做的很好,编写简单的代码来完成常见的任务没有什么大问题。

如果您发现自己在执行大量日期计算,那么 momentjs是一个非常小的 (5kb) 库,可以像这样处理日期。

例如,你现在需要的可以写成:

moment("20130914", "YYYYMMDD");
于 2013-05-23T02:28:30.587 回答
2

因为我爱上了正则表达式:

var rawDate = '20130914';
console.log(new Date(rawDate.replace(/(\d{4})(\d{2})(\d{2})/,"$1-$2-$3")));
//Output: Sat Sep 14 2013 12:00:00 GMT+1200 (New Zealand Standard Time) 
于 2013-05-23T02:29:45.433 回答
1

使用简单明了的 JS:

var input = "20130914";
var date = new Date(input.substr(0, 4), input.substr(4, 2) - 1, input.substr(6, 2));
console.log(date.toString());

于 2013-05-23T02:38:03.110 回答
0

您可以获取部分并将它们直接提供给 Date 构造函数,而不是解析一个字符串来创建另一个要由内置解析器解析的字符串:

let s = '20130914';

// Parse string in YYYYMMDD format to Date object
function parseYMD(s) {
  let b = s.match(/\d\d/g);
  return new Date(b[0]+b[1], b[2]-1, b[3]);
}

console.log(parseYMD(s).toString());

于 2019-09-20T00:42:52.610 回答