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


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


1685
2017-10-07 11:39


起源


var currentTime = new Date(); - Hendrik
见 Date对象的文档。它有例子。 - Quentin
这会对你有所帮助 tizag.com/javascriptT/javascriptdate.php
new Date() 返回当前 时间,不是现在 日期。如果你试图将它与另一个没有时间成分的日期(即午夜时间)进行比较,则区别很重要。 - Steve Bennett
使用momentJs,这个lib对开发者来说是金牌。 - RBoschini


答案:


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

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

if(dd<10) {
    dd = '0'+dd
} 

if(mm<10) {
    mm = '0'+mm
} 

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

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

简单地改变 today = mm +'/'+ dd +'/'+ yyyy; 你想要的任何格式。


2014
2018-02-08 04:42



如何获得小时和分钟 - lbennet
谢谢你的代码..但是我仍然没有得到它,是行if(dd <10){dd ='0'+ dd} ...为什么<10?根据我从代码中理解的是,如果天的字符小于2,只需在前一天添加前面的0 ..但为什么10? - imin
@imin:因为少于2个字符意味着1个字符...... 10以下的所有字符(1到9)都是1个字符,所以我们会有 01, 02,..., 09 - zfm
@MounaCheikhna - 我们怎么能在999年? - nnnnnn
如果您不在北美,则在月份和日期之间交换。 - Mark Micallef


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

使用 replace 选项,如果你要重用 utc 变量,如 new Date(utc)因为Firefox和Safari无法识别带破折号的日期。


341
2017-09-29 14:13



看起来很好是真的。这有什么缺点吗? - Norbert
我不这么认为:)看起来很简单! - Varun Natraaj
toJSON()以utc datetime的形式返回 - Andy
它不考虑TimezoneOffset。在我测试的时候,我正在寻找“现在”,我得到了“昨天”。 stackoverflow.com/questions/13646446/... - mickmackusa
完善。这是我在这里看到的最干净的方法。适用于“今天,不是现在”的MomentJS moment( new Date().toJSON().slice(0, 10) ) - Kyle Hotchkiss


更新!,向下滚动

如果你想为最终用户提供简单漂亮的东西...... 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 经过多次拖延,我终于来了 GitHubbed 并用我自己使用的最终解决方案更新了这个。甚至还有一些最后一分钟的编辑让它更甜!如果你正在寻找旧的 jsFiddle,请看这个

此更新自带 2 口味,仍然相对较小,虽然不如我上面那么小,原始答案。如果你想要非常小,那就去吧。
 另请注意:这仍然比moment.js更臃肿。虽然moment.js很好,但是它有许多世俗的方法,这需要学习时刻,好像它是一种语言。我这里使用相同的通用格式 PHP:日期

快速链接

味道1 new Date().format(String)   我的个人爱好。我知道禁忌,但在日期对象上工作得很好。只要注意日期对象可能有的任何其他mod。

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

味道2 dateFormat(Date, String)   更传统的一体化方法。具有以前的所有能力,但是通过带有Date param的方法调用。

//  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。有关详细信息,请参阅 混帐

在这个mod中,格式字符受到启发 PHP:日期。有关完整列表,请参阅我的 自述

此mod还有更长的预制格式列表。要使用预制格式,只需输入其密钥名称即可。 dateFormat(new Date(), 'pretty-a');

  • '复合'
    • 'commonLogFormat'=='d / M / Y:G:i:s'
    • 'exif'=='Y:m:d G:我: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:我:s.u'
    • 'soap2'=='Y-m-d \\ TH:我:s.uP'
    • 'unixTimestamp'=='@U'
    • 'xmlrpc'=='Ymd \\ TG:i:s'
    • 'xmlrpcCompact'=='Ymd \\ tGis'
    • 'wddx'=='Y-n-j \\ TG:我:s'
  • “常量”
    • 'AMERICAN'=='F j Y'
    • 'AMERICANSHORT'=='m / d / Y'
    • 'AMERICANSHORTWTIME'=='m / d / Y h:i:sA'
    • 'ATOM'=='Y-m-d \\ TH:我:sP'
    • 'COOKIE'=='我d-M-Y H:我:是T'
    • 'EUROPEAN'=='j F Y'
    • 'EUROPEANSHORT'=='d.m.Y'
    • 'EUROPEANSHORTWTIME'=='d.m.Y H:i:s'
    • 'ISO8601'=='Y-m-d \\ TH:我:sO'
    • '法律'=='j F Y'
    • 'RFC822'=='D d M y H:i:s O'
    • 'RFC850'=='我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:我:sP'
    • 'RSS'=='D d M Y H:i:s O'
    • 'W3C'=='Y-m-d \\ TH:我:sP'
  • '漂亮'
    • '漂亮'一个'=='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 \ 逃避一个角色。



187
2018-02-10 14:33



@KamranAhmed差不多2年,40多个选票后,我说这个努力是值得的。大声笑。我已经亲自扩展了这个类,但没有上传,因为我认为大多数人会使用我推荐的其他js日期插件,但我想我应该让它更“公开”并将其添加到这里。 - SpYk3HH
moment.js现在是你最近会使用的东西 - Christian Stewart
竖起大拇指努力,重量轻! - Mike Devenney
上面有一个拼写错误(我花了一段时间才发现),它在行中使用变量“今天”:“dayOfMonth = today +” - user1435707
“今天+(objToday.getDate()<10)?'0'+ objToday.getDate()+ domEnder:objToday.getDate()+ domEnder” - JS是愚蠢的语言。 - Alex S


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

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

document.write(today);


115
2017-09-02 06:14



这似乎是实际回答问题的唯一答案。其他人都会回答如何将日期格式化为字符串。 - Inrego
这个帖子中的++最佳答案 - Pawel Gradecki
确实。这是问题的正确答案。 - tkarls


尝试这个:

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

90
2018-02-15 08:48





最短的。 

要获得类似“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")


62
2018-03-10 16:30





如果您正在寻找对日期格式的更精细控制,我建议您查看momentjs。很棒的图书馆 - 只有5KB。 http://momentjs.com/


57
2017-12-12 01:03



这是我找到的最好的时间! - andho
支持本地化,如魅力。 - Risadinha
这些天我们使用date-fns - 它将日期视为不可变(Moment变更日期),更快且模块化(只需导入您需要的东西)。 - Luke Williams
是的,我完全同意。 - d3cypher


你可以使用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>


45
2017-08-16 11:56



最佳答案,MomentJs看起来很棒。 - nottinhill
只是获取当前日期的时刻太过分了。 - Dan Dascalescu
要么 moment().format("L") 尊重当前的语言环境。 - Dunc
@DanDascalescu实际上,DateTime的Javascript基础规范很糟糕。 - Todd


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”


41
2018-06-28 22:32



我需要00:00:00的时间,不想手动重建它;第2步让我完美无缺。奖励! - panhandel
这样做可以节省一些字节: Date().split(' ').splice(1,3).join(' ') - hyde
谢谢你的分解! - Zach Saucier


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

此外,您可以调用方法 toLocaleDateString 有两个参数:

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

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


36
2017-07-09 07:01



很好,适用于Chrome。不幸的是,自2016年4月22日起,PhantomJS无效 - chris