vue时间字符串"2021年12月20日"转date对象 返回 Invalid date的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue时间字符串"2021年12月20日"转date对象 返回 Invalid date的问题相关的知识,希望对你有一定的参考价值。
参考技术A 最近遇到一个问题,有一些特殊处理的时间字符串如果直接使用new Date会导致输出Invalid Date的问题,例如因为这里的时间字符串并不是标准的时间格式,是一个特殊处理过的。
我们知道这种特殊的时间字符串是通过一些自定义函数或Moment.js加时间模板来生成的。那我们可不可以用时间模板反义回Date数据呢?自定义处理这类似的问题估计会很复杂,查找Moment.js的方法,发现Moment.js可以使用自定义时间模板来格式化时间字符串
先安装Moment
利用Moment.js格式化时间字符串生成Date数据
附上Moment.js 的官网链接 https://momentjs.com/
这里Moment.js可换成Dayjs体积更小功能一样 https://github.com/iamkun/dayjs
确定字符串格式是“2013 年 5 月 16 日”还是带有 Javascript 的 UNIX 时间戳
【中文标题】确定字符串格式是“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 绝对是最干净的解决方案。以上是关于vue时间字符串"2021年12月20日"转date对象 返回 Invalid date的问题的主要内容,如果未能解决你的问题,请参考以下文章
如果到达日期大于 2021 年 1 月 11 日,则填写“SMP”
excel中求日期减掉上一个季度末月的20日,也就是两者之间的天数。