最新编辑:2019 年 8 月 23 日
date-fns 库的工作方式与 moment.js 非常相似,但占用空间要小得多。它使您可以挑选要包含在项目中的函数,这样您就不必编译整个库来格式化今天的日期。如果您的项目不能选择最小的第 3 方库,我赞同 Samuel Meddows 接受的解决方案。
保留以下历史记录,因为它帮助了一些人。但是为了记录,它非常hacky并且很容易在没有警告的情况下打破,就像这篇文章中的大多数解决方案一样
2017 年 2 月 7 日编辑
单行JS解决方案:
tl;博士
var todaysDate = new Date(Date.now()).toLocaleString().slice(0,3).match(/[0-9]/i) ? new Date(Date.now()).toLocaleString().split(' ')[0].split(',')[0] : new Date(Date.now()).toLocaleString().split(' ')[1] + " " + new Date(Date.now()).toLocaleString().split(' ')[2] + " " + new Date(Date.now()).toLocaleString().split(' ')[3];
edge, ff latest, & chrome return todaysDate = "2/7/2017"
"works"* in IE10+
说明
我发现 IE10 和 IE Edge 做的事情有点不同.. 想一想。
以new Date(Date.now()).toLocaleString() 作为输入,
IE10 返回:
"Tuesday, February 07, 2017 2:58:25 PM"
我可以写一个很长的函数和 FTFY。但是你真的应该使用moment.js来处理这些东西。我的脚本只是清理了它并为你提供了扩展传统的美国符号:> todaysDate = "March 06, 2017"
IE EDGE 返回:
"2/7/2017 2:59:27 PM"
当然不可能那么容易。 Edge 的日期字符串在每个可见字符之间都有不可见的“•”字符。 因此,我们现在不仅要检查第一个字符是否为数字,还要检查前 3 个字符,因为事实证明,任何一个整个日期范围内的字符最终会在某个时间点变为点或斜线。所以为了简单起见,只需.slice() 前三个字符(针对未来恶作剧的小缓冲区),然后检查数字。应该注意的是,这些不可见的点可能会持续存在于您的代码中。如果您有更大的计划,而不仅仅是将此字符串打印到您的视图中,我可能会深入研究。
∴更新单行:
var todaysDate = new Date(Date.now()).toLocaleString().slice(0,3).match(/[0-9]/i) ? new Date(Date.now()).toLocaleString().split(' ')[0].split(',')[0] : new Date(Date.now()).toLocaleString().split(' ')[1] + " " + new Date(Date.now()).toLocaleString().split(' ')[2] + " " + new Date(Date.now()).toLocaleString().split(' ')[3];
读起来很糟糕。怎么样:
var dateString = new Date(Date.now()).toLocaleString();
var todaysDate = dateString.slice(0,3).match(/[0-9]/i) ? dateString.split(' ')[0].split(',')[0] : dateString.split(' ')[1] + " " + dateString.split(' ')[2] + " " + dateString.split(' ')[3];
原始答案
我为你准备了一个单线:
new Date(Date.now()).toLocaleString().split(', ')[0];
[1] 会给你一天中的时间。