如何在JavaScript中获取当前日期?
当前回答
最新编辑:2019年8月23日date fns库的工作方式与moment.js非常相似,但占用空间要小得多。它可以让您快速选择要包含在项目中的函数,这样您就不必编译整个库来格式化今天的日期。如果您的项目不能选择最小的第三方库,我支持塞缪尔·梅多斯(Samuel Meddows)的公认解决方案。
保存下面的历史,因为它帮助了一些人。但从记录上看,它相当粗糙,很容易在没有警告的情况下被打破,这篇文章中的大多数解决方案也是如此
编辑2017年7月2日单行JS解决方案:
tl;博士var todaysDate=新日期(Date.now()).toLocaleString().slice(0,3).match(/[0-9]/i)?new Date(Date.now()).toLocaleString().split(“”)[0].splite(',')[0]:新日期(Date.nnow()).ToLocaleSstring().spit(“')[1]+“”+新日期(Date.now(”).toLocal eString).splite“”)[2]+“”+new日期(Date:now().toLocaleString;edge,ff最新,&chrome返回todaysDate=“2/7/2017”“works”*在IE10中+
解释
我发现IE10和IE Edge的做法有点不同。。想想看吧以new Date(Date.now()).toLocaleString()作为输入,
IE10返回:
"Tuesday, February 07, 2017 2:58:25 PM"
我可以写一个大的长函数和FTFY。但你真的应该用moment.js来做这些。我的脚本只是清理了这一点,并为您提供了扩展的传统美国符号:>todaysDate=“2017年3月6日”
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]会给你一天的时间。
其他回答
使用new Date()生成包含当前日期和时间的新Date对象。
var today=新日期();var dd=字符串(today.getDate()).padStart(2,'0');var mm=字符串(today.getMonth()+1).padStart(2,'0')//一月是0!var yyyy=today.getFullYear();今天=mm+'/'+dd+'/'+yyyy;document.write(今天);
这将以mm/dd/yyyy的格式显示今天的日期。
只需更改今天=mm+'/'+dd+'/'+yyyy;按照您希望的格式。
TL;博士
只有当您需要本地计算机(客户端)上的当前时间时,这里找到的大多数答案才是正确的,而本地计算机(客户机)是一个通常不可靠的源(它可能与其他系统不同)。
可靠的来源包括:
Web服务器的时钟(但确保已更新)时间API和CDN
细节
在Date实例上调用的方法将返回一个基于计算机本地时间的值。
更多详细信息可以在“MDN web docs”:JavaScript Date对象中找到。
为了方便您,我从他们的文档中添加了一条相关注释:
(…)获取日期和时间或其组件的基本方法都在本地(即主机系统)时区和偏移中工作。
提到这一点的另一个来源是:JavaScript日期和时间对象
需要注意的是,如果某人的时钟关闭了几个小时,或者他们在不同的时区,则Date对象将创建与您自己计算机上创建的时间不同的时间。
您可以使用的一些可靠来源是:
web服务器的时钟(首先检查是否正确设置)时间API和CDN:https://timezonedb.com/apihttp://worldtimeapi.orghttp://worldclockapi.comhttp://www.geonames.org/export/ws-overview.html其他相关API:https://www.programmableweb.com/category/time/api
但是,如果准确度对您的用例并不重要,或者如果您只需要日期与本地机器的时间相关,那么您可以安全地使用Javascript的date基本方法,如date.now()。
已更新!,向下滚动
如果你想让最终用户觉得简单漂亮。。。此外,在下面的第一个版本中修复了一个小后缀问题。现在正确返回后缀。
var objToday=新日期(),工作日=新阵列(‘星期一’、‘星期一”、‘星期二’、‘周三’、‘周四’、‘周五’、‘周六’),dayOfWeek=工作日[objToday.getDay()],domEnder=function(){var a=objToday;if(/1/.test(parseInt((a+“”).charAt(0))))返回“th”;a=parseInt((a+“”).charAt(1));返回1==a?“st”:2=a?“nd”:3==a?”rd“:”th“}(),dayOfMonth=今天+(objToday.getDate()<10)?'0’+objToday.getDate()+domEnder:objToday.getData()+domEnder,months=新阵列(“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”),curMonth=月[objToday.getMonth()],curYear=objToday.getFullYear(),curHour=objToday.getHours()>12?objToday.getHours()-12:(objToday.getHoures()<10?“0”+objToday.getHours():objToday.getHoures()),curMinute=objToday.getMinutes()<10?“0”+objToday.getMinutes():objToday.getMinute(),curSeconds=objToday.getSeconds()<10?“0”+objToday.getSeconds():objToday.getSecond(),curMeridiem=objToday.getHours()>12?“下午”:“上午”;var today=curHour+“:”+curMinute+“.”+curSeconds+curMeridiem+“”+dayOfWeek+“”+dayOfMonth+“of”+curMonth+“,”+curYear;document.getElementsByTagName('1')[0].textContent=today;<h1></h1>
UBBER更新经过多次拖延,我终于在GitHubbed上更新了我自己使用的最终解决方案。它甚至在最后一刻做了一些编辑,让它更甜!如果你正在寻找旧的jsFiddle,请看这个。
这个更新有两种口味,虽然没有我上面的原始答案那么小,但仍然相对较小。如果你想要极小的尺寸,那就这样吧。另请注意:这仍然没有moment.js那么臃肿。虽然moment.jss很好,imo,但它有太多世俗的方法,需要像学习一种语言一样学习片刻。我这里使用与PHP相同的常见格式:date。
快速链接
日期.format.min.js 5.08 KBdateFormat.min.js 4.16 KB
风味1新日期().format(字符串)我的个人传真。我知道这个禁忌,但在约会对象上效果很好。只需注意日期对象可能具有的任何其他mod。
// use as simple as
new Date().format('m-d-Y h:i:s'); // 07-06-2016 06:38:34
风味2日期格式(日期,字符串)更传统的一体化方法。具有上一个的所有功能,但通过带有Date参数的方法调用。
// use as simple as
dateFormat(new Date(), 'm-d-Y h:i:s'); // 07-06-2016 06:38:34
BONUS风味(需要jQuery)$.date(日期,字符串)这不仅仅包含一个简单的格式选项。它扩展了基础Date对象,并包括addDays等方法。有关更多信息,请参阅Git。
在这个mod中,格式字符的灵感来自PHP:date。有关完整列表,请参阅我的自述文件
这个mod还有一个长得多的预制格式列表。要使用预制格式,只需输入其密钥名称。dateFormat(new Date(),'pretty-a');
'化合物'“commonLogFormat”==“d/M/Y:G:i:s”“exif”==“Y:m:d G:i:s”“isoYearWeek”==“Y\\WW”“isoYearWeek2”==“Y-\\WW”“isoYearWeekDay”==“Y\\WWj”“isoYearWeekDay2”==“Y-\\WW-j”“mySQL”==“Y-m-d h:i:s”“postgreSQL”==“Y.z”'postgreSQL2'=='Yz''soap'=='Y-m-d\\TH:i:s.u'“soap2”==“Y-m-d\\TH:i:s.uP”“unixTimestamp”==“@U”'xmlrpc'=='Ymd\\TG:i:s''xmlrpcCompact'=='Ymd\\tGis'“wddx”==“Y-n-j\\TG:i:s”'常量'“美国”==“F j Y”“美洲海岸”==“m/d/Y”“美国时间”==“m/d/Y h:i:sA”“原子”==“Y-m-d\\TH:i:sP”“COOKIE”==“l d-M-Y H:i:s T”“欧洲”==“j F Y”“欧洲”==“d.m.Y”“欧洲时间”==“d.m.Y H:i:s”“ISO8601”==“Y-m-d\\TH:i:sO”“法律”==“j F Y”“RFC822”==“D D M y H:i:s O”“RFC850”==“l d-M-y H:i:s T”“RFC1036”==“D D M y H:i:s O”“RFC1123”==“D D M Y H:i:s O”“RFC2822”==“D D M Y H:i:s O”'RFC3339'=='Y-m-d\\TH:i:sP'“RSS”==“D D M Y H:i:s O”“W3C”==“Y-m-d\\TH:i:sP”“漂亮”“pretty-a”==“g:i.sA l jS\\o\\f f Y”“pretty-b”==“g:iA l jS\\o\\f f Y”'pretty-c'=='n/d/Y g:iA'“pretty-d”==“n/d/Y”'pretty-e'=='F jS-g:ia'“pretty-f”==“g:iA”
正如您可能注意到的,您可以使用double\来转义字符。
如果您想要对日期格式进行更精细的控制,我强烈建议您查看momentjs。非常棒的图书馆-只有5KB。http://momentjs.com/
如果您希望对日期格式进行更精细的控制,我强烈建议您查看日期FNS。
它是一个很棒的库,比Moment.js小得多。它是一种基于函数的方法,比其他基于类的库更快。它提供了迄今为止所需的大量操作。