确定字符串格式是“2013 年 5 月 16 日”还是带有 Javascript 的 UNIX 时间戳

Posted

技术标签:

【中文标题】确定字符串格式是“2013 年 5 月 16 日”还是带有 Javascript 的 UNIX 时间戳【英文标题】:Determine if string format is "May 16, 2013" or UNIX Timestamp with Javascript 【发布时间】:2014-01-15 09:35:06 【问题描述】:

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

转换了其他日期字段
new Date("May 16, 2013")

new Date(NumberLong(1370039735000))

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

【问题讨论】:

能不能不用MongoDB的查询$type操作符来检查是日期还是时间戳字段? @hwnd 我无法使用 $type,因为所有数据都以字符串形式提供给我。 【参考方案1】:

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

isNaN(datestring_or_number)

使用方便

new Date(isNaN(str) ? str : NumberLong(str));

【讨论】:

【参考方案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

【讨论】:

那是……他的帖子根本不是这么说的,显然也不是他的本意。它说“像......这样的格式”。这怎么可能意味着你所暗示的意思? @ColinDeClue 我不明白你在说什么......他说他有像 X 和 Y 这样的格式,我假设这些是他唯一的格式。这不合理吗? 天哪。我误解了你的帖子。我以为你只是在测试那些确切的东西。如,正是这两个日期。【参考方案3】:

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

【讨论】:

但是一旦这个 /[a-z]/i.test(1370039735000) 达到 Number 的数据类型,它不会在联系上失败吗? 确实会,但无论如何@adeneo 的答案可能比我们的两个正则表达式答案都要好。 ;) 感谢您为我指明正确的方向@Vache。您的解决方案也值得赞赏! 是的,Regex 不是最简单的解决方案,但由于要求 Regex,这就是我所描述的。 Adeneo 建议使用 isNaN 绝对是最干净的解决方案。

以上是关于确定字符串格式是“2013 年 5 月 16 日”还是带有 Javascript 的 UNIX 时间戳的主要内容,如果未能解决你的问题,请参考以下文章

开发利器 - Android Studio的安装

正确确定日期字符串是不是是该格式的有效日期

从字符串确定日期时间格式

格式化字符串攻击原理及示例

java格式化字符串%s个数不确定,全网独家首发!

如何解释 Excel 数字格式字符串以确定值是不是应由 DateTime.FromOADate 解析