如何在JavaScript中获取当前日期?


2305

如何在JavaScript中获取当前日期?


383
var currentTime = new Date();
亨德里克

11
请参阅有关Date对象文档。它有例子。
昆汀2009年


24
new Date()返回当前时间,而不是当前日期。如果您想将它与另一个没有时间成分的日期(即午夜)进行比较,则区别很重要。
史蒂夫·贝内特

11
使用momentJs,此库对于开发人员而言是黄金。
RBoschini

Answers:


2714

使用new Date()生成一个新的Date包含当前日期和时间对象。

var today = new Date();
var dd = String(today.getDate()).padStart(2, '0');
var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var yyyy = today.getFullYear();

today = mm + '/' + dd + '/' + yyyy;
document.write(today);

这将以mm / dd / yyyy的格式给您今天的日期。

只需更改today = mm +'/'+ dd +'/'+ yyyy;为所需的任何格式。


7
感谢您的代码..但我仍然不明白,是if(dd <10){dd ='0'+ dd}行...为什么<10?从代码中我了解的是,如果一天的字符小于2,只需在一天前添加一个前面的0。但是为什么要10?
imin

20
@imin:因为少于2个字符来1个字符...一切在10(1至9)为1个字符,所以我们必须0102...,09
ZFM

11
@MounaCheikhna-999年我们会怎样?
nnnnnn 2014年

21
如果您不在北美,请交换月份和日期。
Mark Micallef 2014年

3
Date.prototype.toLocaleDateString()方法是一种更灵活的解决方案。自ECMAScript 5.1以来,它是JavaScript的一部分,并且得到了常绿浏览器的良好支持。MDN:toLocaleDateString()
亚当·布朗

442

var utc = new Date().toJSON().slice(0,10).replace(/-/g,'/');
document.write(utc);

replace如果您要重复使用utc变量,请使用选项,例如new Date(utc),因为Firefox和Safari无法识别带短划线的日期。


6
我不这么认为:)似乎很简单!
Varun Natraaj 2014年

6
toJSON()返回为utc日期时间
Andy N

1
它返回一个JSON日期时间。toUTCString()返回为utc datetime。
Varun Natraaj

25
它不考虑TimezoneOffset。在测试时,我正在寻求“现在”,而我却获得了“昨天”。stackoverflow.com/questions/13646446/...
mickmackusa

7
完善。这是我在这里看到的最干净的方法。在MomentJS中,“今天,不是现在”效果很好moment( new Date().toJSON().slice(0, 10) )
Kyle Hotchkiss

234

更新!,向下滚动

如果您想让最终用户简单一些漂亮的东西... Also, fixed a small suffix issue in the first version below. Now properly returns suffix.

var objToday = new Date(),
	weekday = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'),
	dayOfWeek = weekday[objToday.getDay()],
	domEnder = function() { var a = objToday; if (/1/.test(parseInt((a + "").charAt(0)))) return "th"; a = parseInt((a + "").charAt(1)); return 1 == a ? "st" : 2 == a ? "nd" : 3 == a ? "rd" : "th" }(),
	dayOfMonth = today + ( objToday.getDate() < 10) ? '0' + objToday.getDate() + domEnder : objToday.getDate() + domEnder,
	months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'),
	curMonth = months[objToday.getMonth()],
	curYear = objToday.getFullYear(),
	curHour = objToday.getHours() > 12 ? objToday.getHours() - 12 : (objToday.getHours() < 10 ? "0" + objToday.getHours() : objToday.getHours()),
	curMinute = objToday.getMinutes() < 10 ? "0" + objToday.getMinutes() : objToday.getMinutes(),
	curSeconds = objToday.getSeconds() < 10 ? "0" + objToday.getSeconds() : objToday.getSeconds(),
	curMeridiem = objToday.getHours() > 12 ? "PM" : "AM";
var today = curHour + ":" + curMinute + "." + curSeconds + curMeridiem + " " + dayOfWeek + " " + dayOfMonth + " of " + curMonth + ", " + curYear;

document.getElementsByTagName('h1')[0].textContent = today;
<h1></h1>

UBBER UPDATE经过长时间的拖延,我终于在GitHub上进行了整理,并用我一直在使用的最终解决方案对其进行了更新。它甚至在最后一刻进行了一些编辑,使其更甜美!如果您正在寻找旧的jsFiddle,请参阅this

此更新有2种样式,尽管相对于我上面的原始答案还小,但仍然相对较小。如果您要很小,那就去吧。
另请注意:这仍然比moment.js少一些。imo虽然moment.js很不错,但它有太多世俗的方法,需要像学习语言一样学习瞬间。我这里使用与PHP相同的通用格式:date

快速链接

味道1new Date().format(String) 我的最爱。我知道忌讳,但在Date对象上效果很好。请注意,您可能需要对Date对象进行任何其他修改。

//  use as simple as
new Date().format('m-d-Y h:i:s');   //  07-06-2016 06:38:34

风味2dateFormat(Date, String) 更传统的多合一方法。具有先前的所有功能,但通过带有Date参数的方法调用。

//  use as simple as
dateFormat(new Date(), 'm-d-Y h:i:s');  //  07-06-2016 06:38:34

奖金风味(需要jQuery)$.date(Date, String) 它包含的不仅仅是简单的format选项。它扩展了基础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'=='Ymd h:i:s'
    • 'postgreSQL'=='Yz'
    • 'postgreSQL2'=='Yz'
    • '肥皂'=='Ymd \\ TH:i:su'
    • 'soap2'=='Ymd \\ TH:i:s.uP'
    • 'unixTimestamp'=='@U'
    • 'xmlrpc'=='Ymd \\ TG:i:s'
    • 'xmlrpcCompact'=='Ymd \\ tGis'
    • 'wddx'=='Ynj \\ TG:i:s'
  • '常量'
    • '美国'=='F j Y'
    • 'AMERICANSHORT'=='m / d / Y'
    • 'AMERICANSHORTWTIME'=='m / d / Y h:i:sA'
    • 'ATOM'=='Ymd \\ TH:i:sP'
    • 'COOKIE'=='l dMY H:i:s T'
    • '欧洲'=='j FY'
    • 'EUROPEANSHORT'=='dmY'
    • 'EUROPEANSHORTWTIME'=='dmY H:i:s'
    • 'ISO8601'=='Ymd \\ TH:i:sO'
    • '法律'=='j FY'
    • 'RFC822'=='D d M y H:i:s O'
    • 'RFC850'=='l dMy H:i:s T'
    • 'RFC1036'=='D d M y H:i:s O'
    • 'RFC1123'=='D d MYH:i:s O'
    • 'RFC2822'=='D d MYH:i:s O'
    • 'RFC3339'=='Ymd \\ TH:i:sP'
    • 'RSS'=='D d MYH:i:s O'
    • 'W3C'=='Ymd \\ TH:i:sP'
  • '漂亮'
    • 'pretty-a'=='g:i.sA l jS \\ o \\ f FY'
    • 'pretty-b'=='g:iA l jS \\ o \\ f FY'
    • 'pretty-c'=='n / d / Y g:iA'
    • 'pretty-d'=='n / d / Y'
    • 'pretty-e'=='F jS-g:ia'
    • '漂亮-f'=='g:iA'

您可能会注意到,可以使用double \来转义字符。



14
@KamranAhmed差不多2年零40票之后,我想付出的努力是值得的。大声笑。从那以后,我就亲自扩展了这个类,但是由于我认为大多数人会使用我认为推荐的其他js日期插件,所以还没有上传,但是我想我应该使其更“公开”并在此处添加。
SpYk3HH 2014年

14
现在,这些天您就会使用moment.js
Christian Stewart

1
上面有一个错字(花了我一段时间),它在行中使用了变量“ today”:“ dayOfMonth = today +”
user1435707

“今天+(objToday.getDate()<10)?'0'+ objToday.getDate()+ domEnder:objToday.getDate()+ domEnder”-JS是愚蠢的语言。
Alex S

211

最短的时间。

要获取类似“ 2018-08-03”的格式,请执行以下操作:

let today = new Date().toISOString().slice(0, 10)

console.log(today)

要获取类似“ 8/3/2018”的格式:

let today = new Date().toLocaleDateString()

console.log(today)

另外,您可以将语言环境作为参数传递,例如toLocaleDateString("sr"),等等。


3
由于时区偏移,此操作仍然失败。
LStarky

7
为什么这不是公认的答案,最简单且使用内置函数
lifesoordinary

171

如果您只想要没有时间信息的日期,请使用:

var today = new Date();
    today.setHours(0, 0, 0, 0);

document.write(today);


40
这似乎是实际回答问题的唯一答案。其他人都回答如何将日期格式化为字符串。
Inrego 2015年

1
我同意。实际上,我想写一个与此答案类似的答案,然后弹出一个小窗口,问我是否已阅读所有答案。由于我只阅读了最重要的答案,因此决定检查是否有正确答案,而这是第一个正确答案。
Lajos Arpad

这会使用UTC设置小时数,这可能不适用于所有用例。
麦凯

103

尝试这个:

var currentDate = new Date()
var day = currentDate.getDate()
var month = currentDate.getMonth() + 1
var year = currentDate.getFullYear()
document.write("<b>" + day + "/" + month + "/" + year + "</b>")

结果会像

15/2/2012

67

如果您想对日期格式进行更多的粒度控制,我强烈建议您查看一下momentjs。很棒的图书馆-只有5KB。 http://momentjs.com/


7
像魅力一样支持本地化。
里沙迪尼亚

如今,我们使用date-fns-将日期视为不可变的(瞬间使日期可变),速度更快且模块化(只需导入所需的内容)。
Freewalker

2
发布此刻后的六年,js发挥了相当大的作用。您可能要改用github.com/iamkun/dayjs-我已经将它描述为“节食中的momentjs”。相同的简单API。
benjamin.keen

55

您可以使用moment.js:http://momentjs.com/

var m = moment().format("DD/MM/YYYY");

document.write(m);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>


30
仅仅获取当前日期就显得过于刻板。
Dan Dascalescu 2014年

moment().format("L")尊重当前的语言环境。
Dunc

@DanDascalescu实际上,DateTime的Javascript基本规范是如此糟糕。
托德(Todd)

如果您已经在项目中导入了momentjs,那么这是最简单的答案。
阿迪尔·拉扎

52

var d = (new Date()).toString().split(' ').splice(1,3).join(' ');

document.write(d)

要将其分解为以下步骤:

  1. (new Date()).toString() 给出“ 2013年6月28日星期五15:30:18 GMT-0700(PDT)”

  2. (new Date()).toString().split(' ') 在每个空格上划分上述字符串,并返回如下数组:[“ Fri”,“ Jun”,“ 28”,“ 2013”​​,“ 15:31:14”,“ GMT-0700”,“(PDT)” ]

  3. (new Date()).toString().split(' ').splice(1,3).join(' ') 从上面的数组中获取第二,第三和第四值,将它们与空格连接,然后返回字符串“ Jun 28 2013”


2
我需要00:00:00的时间,并且不想手动重建它;第2步使我完美到达那里。荣誉!
panhandel

3
您可以这样做来保存一些字节:Date().split(' ').splice(1,3).join(' ')
hyde 2015年

47

每次都有效:

    var now = new Date();
    var day = ("0" + now.getDate()).slice(-2);
    var month = ("0" + (now.getMonth() + 1)).slice(-2);
    var today = now.getFullYear() + "-" + (month) + "-" + (day);
    
    console.log(today);


45
var date = new Date().toLocaleDateString("en-US");

另外,您可以toLocaleDateString使用两个参数来调用method :

var date = new Date().toLocaleDateString("en-US", {
    "year": "numeric",
    "month": "numeric"
});

关于MSDN的文章。有关MDN上此方法的更多信息。


不错,可在Chrome上使用。不幸的是,截至2016
chris

很酷的解决方案。应该在顶部。new Date().toLocaleDateString("de-de")为我做the俩。
user3772108

29

更干净,更简单的版本:

new Date().toLocaleString();

结果根据用户的区域设置而异

2017/2/27上午9:15:41


27

如果您对YYYY-MM-DD格式感到满意,那么也可以完成这项工作。

new Date().toISOString().split('T')[0]

2018-03-10


由于长度始终是固定的,因此我们也可以使用子字符串。新的Date()。toISOString()。substring(0,10); 可能会更快。
Mika Karjunen

23

您可以使用扩展了 Date对象的Date.js库,从而可以使用.today()方法。


11
如果您将jquery ui与日期选择器一起使用,则可以使用$ .datepicker.formatDate('yy / mm / dd',new Date())
Peter


16

Varun的答案不考虑TimezoneOffset。这是一个做的版本:

var d = new Date()
new Date(d.getTime() - d.getTimezoneOffset() * 60000).toJSON().slice(0, 10) // 2015-08-11

TimezoneOffset是分钟,而Date构造函数采用毫秒,因此乘以60000




11

因为toISOString()只会返回当前UTC时间,而不是本地时间。我们必须使用'.toString()'函数来确定日期,yyyy-MM-dd以使用类似以下格式的日期

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('T')[0]);

yyyy-MM-ddTHH:mm:ss格式获取日期和时间

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('.')[0]);

yyyy-MM-dd HH:mm:ss格式获取日期和时间

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('.')[0].replace('T',' '));


10

如果您想要一种简单的DD/MM/YYYY格式,尽管它没有为缺失的零添加前缀,但我只是想出了一种简单的解决方案。

var d = new Date();
document.write( [d.getDate(), d.getMonth()+1, d.getFullYear()].join('/') );



8

最新编辑:19年8月23日日期FNS库很像moment.js但有一个方法更小的空间。它使您可以选择要包含在项目中的功能,这样就不必编译整个库来格式化今天的日期。如果您的项目没有最小的第三方库,那么我将最高支持Samuel Meddows接受的解决方案。

在下面保存历史,因为它对一些人有帮助。但是从记录来看,它是很hacky的,很容易在没有警告的情况下被破坏,就像本文中的大多数解决方案一样

编辑2/7/2017 一种单行JS解决方案:

tl; dr

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最新和chrome todaysDate = "2/7/2017"
在IE10 +中返回“作品” *

说明

我发现IE10和IE Edge的功能有所不同。同new Date(Date.now()).toLocaleString()作为输入,

IE10返回:

"Tuesday, February 07, 2017 2:58:25 PM"

我可以写一个大的long函数和FTFY。但是,您确实应该对这些东西使用moment.js我的脚本只是清理了一下,并为您提供了扩展的传统美国符号:> todaysDate = "March 06, 2017"

IE EDGE返回:

"‎2‎/‎7‎/‎2017‎ ‎2‎:‎59‎:‎27‎ ‎PM"

当然不可能那么容易。Edge的日期字符串在每个可见的字符串之间都有不可见的“•”字符。因此,我们现在不仅要检查第一个字符是否是数字,还要检查前三个字符,因为事实证明,整个日期范围内的任何单个字符最终都将在某个点上是点或斜杠。为了简单起见,起见 .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]会给您一天中的时间。


7

你可以用这个

<script>
function my_curr_date() {      
    var currentDate = new Date()
    var day = currentDate.getDate();
    var month = currentDate.getMonth() + 1;
    var year = currentDate.getFullYear();
    var my_date = month+"-"+day+"-"+year;
    document.getElementById("dateField").value=my_date;    
}
</script>

HTML是

<body onload='return my_curr_date();'>
    <input type='text' name='dateField' id='dateField' value='' />
</body>

6

如果您使用的是jQuery。试试这个衬垫:

$.datepicker.formatDate('dd/mm/yy', new Date());

这是格式化日期的惯例

  • d-每月的某天(前导零)
  • dd-月份中的日期(两位数)
  • o-一年中的某天(无前导零)
  • oo-一年中的某天(三位数)
  • D-天名短
  • DD-天名长
  • m-一年中的月份(前导零)
  • 毫米-一年中的月份(两位数)
  • M-月名简称
  • MM-月名长
  • y-年(两位数)
  • yy-年(四位数)

这是jQuery datepicker的参考


5

一个简单的实现方法(考虑到您当前的时区,它利用ISO yyyy-mm-dd格式)是:

let d = new Date().toISOString().substring(0,19).replace("T"," ") // "2020-02-18 16:41:58"

通常,这是一种通用的兼容日期格式,您可以根据需要将其转换为纯日期值:

Date.parse(d); // 1582044297000

4

您可以结帐

var today = new Date();
today = parseInt(today.getMonth()+1)+'/'+today.getDate()+'/'+today.getFullYear()+"\nTime : "+today.getHours()+":"+today.getMinutes()+":"+today.getSeconds();
document.write(today);

并参阅Date()构造函数的文档。 链接


4

这有什么大不了的。最干净的方法是

var currentDate=new Date().toLocaleString().slice(0,10);


1
这样会3/4/2018, 更好地返回错误new Date().toJSON().slice(0,10)
DevonDahon

这非常适合仅获取查看日期或控制台日志或UI上的信息的日期。没有.slice(0,10)
保罗·卡尔顿



3

我认为这是一个古老的问题,但最简单的方法如下:

var date = new Date();
var TimeStamp = date.toLocaleString();

function CurrentTime(){
  alert(TimeStamp);
}

这将获取当前时间,并根据位置将其传递给字符串,然后您可以调用函数CurrentTime来显示时间。对我来说,这是为某事获取时间戳的最有效方法。


这将返回数据和时间,例如。'2018-4-6 16:20:22',问题是如何只获取日期。
弗拉德·贝兹登
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.