6

对大型数据集进行一些数据处理。数据有一个“日期”字段,可以在“1370039735000”和“2013 年 5 月 16 日”等格式之间随机切换。到目前为止,我已经将其他日期字段转换为

new Date("May 16, 2013")

或者

new Date(NumberLong(1370039735000))

如何使用正则表达式或其他方式区分两者?我正在使用 MongoDB,但它都是 Javascript。

4

3 回答 3

5

如果它是一个 unix 时间戳,它只是数字,如果不是,它是一个实际的字符串(不是空的或布尔值)并且 javascript 有一个函数,isNaN

isNaN(datestring_or_number)

可以很容易地使用

new Date(isNaN(str) ? str : NumberLong(str));
于 2013-12-27T19:50:07.543 回答
2

从您的帖子中,我假设您绝对 100% 确定这是仅有的两种可能的格式。如果不是这种情况,请评论/编辑您的帖子。

测试日期是否包含字母应该以简单的方式完成交易。

/[a-z]/i.test("May 16, 2013") // true, the date is written out
/[a-z]/i.test(1370039735000) // false, it's unix epoch format
于 2013-12-27T19:39:24.837 回答
1

如果您担心速度,您应该只测试正则表达式“^\D”(不是数字),因为一旦它在“May ...”中击中“M”,它就会失败。这将很快失败,并且只运行最少的次数。您可能还考虑只获取字符串中第一个字符的子字符串并尝试将其转换为 int,如果它失败,那么同样的事情也是如此。然而,通过保持 Regex 这样的简短,速度应该不是问题。

于 2013-12-27T19:46:39.860 回答