我要转换的JSON字符串包含日期格式为value = "YYYY-MM-DDTHH:MM:SSZ"
的日期值,但是由于某些技术原因,我不会转移到new Date(value)
上将不起作用。但是,格式为"YYYY/MM/DD HH:MM:SS"
的值将起作用。
还可以使用另一种方法,将值分解为年,月,日,时,分,秒,并使用这些值创建新的Date()。
看似更长的方法,将值分解为以下部分:
var ymd = value.split('T')[0].split('-');
var hms = value.split('T')[1].substr(0,8).split(':');
return new Date(ymd[0], ymd[1]-1, ymd[2], hms[0], hms[1], hms[2]);
一种简单易懂的方法是这样的:
return new Date(value.replace(/-/g, '/').replace('T', ' ').substr(0,19));
这两种方法都可以,但是第一个看起来更复杂,但明显比单线快。我有一个包含数百个元素的数组,每个元素包含一个具有多个原始字符串格式的日期值的Object。使用第一种长久的方法,基本上所有内容都会立即返回。使用第二种单线方法时,每次返回都会明显停顿一两秒钟。
我很好奇为什么第一种方法比第二种方法快得多。有什么想法吗?
谢谢。
答案 0 :(得分:2)
根据https://medium.com/dailyjs/js-regexp-fast-and-slow-d29d6b77b06
String.split()的速度可以比Regex快40倍,除非满足某些条件导致Regex在内部调用string.split()。
答案 1 :(得分:1)
首先,与搜索字符串有关的所有操作都变慢(没有索引的操作)。
替换需要搜索字符串中的所有匹配项以进行替换。 replace本身也是cpu使用者,它需要在内存中创建一个新字符串来管理替换。
要考虑的另一件事是浏览器引擎,某些引擎的运行速度比其他引擎要快,这取决于浏览器是否使用内部功能
有关更多信息,请参见此链接: Why is String.replace() with lambda slower than a while-loop repeatedly calling RegExp.exec()?