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

Sur*_*nti 2152 javascript date

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

Sam*_*ows 2528

使用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);
Run Code Online (Sandbox Code Playgroud)

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

只需更改today = mm +'/'+ dd +'/'+ yyyy;为您希望的任何格式.

  • @imin:因为少于2个字符意味着1个字符...... 10以下的所有内容(1到9)都是1个字符,所以我们将有`01`,`02`,...,`09` (20认同)
  • 如果您不在北美,则在月份和日期之间交换. (20认同)
  • @MounaCheikhna - 我们怎么能在999年? (11认同)
  • 感谢代码......但是我仍然没有得到它,是行if(dd <10){dd ='0'+ dd} ...为什么<10?根据我从代码中理解的是,如果天的字符小于2,只需在当天前面添加前面的0 ..但为什么10? (7认同)
  • 新的`Date.prototype.toLocaleDateString()`方法是一种更灵活的解决方案.它是自ECMAScript 5.1以来的JavaScript的一部分,并得到常绿浏览器的良好支持.[MDN:`toLocaleDateString()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString) (2认同)
  • date.toLocaleDateString('en-GB') (2认同)
  • 从2019年3月开始编辑后,此答案使用的是ES2017功能(`padStart`),该功能在Internet Explorer(任何版本)中均不起作用 (2认同)

Var*_*aaj 417

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

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

  • 它不考虑TimezoneOffset.在我测试的时候,我正在寻找"现在",我得到了"昨天".http://stackoverflow.com/questions/13646446/javascript-date-tojson-produces-a-date-which-has-wrong-hours-and-minutes (24认同)
  • 看起来很不错.这有什么缺点吗? (6认同)
  • 完善.这是我在这里看到的最干净的方法.在MomentJS中适用于"今天,不是现在"的时刻(新的日期().toJSON().切片(0,10)) (6认同)
  • 我不这么认为:)看起来很简单! (5认同)
  • toJSON()返回utc datetime (5认同)

SpY*_*3HH 225

更新!,向下滚动

如果你想为最终用户提供简单漂亮的东西...... 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;
Run Code Online (Sandbox Code Playgroud)
<h1></h1>
Run Code Online (Sandbox Code Playgroud)

UBBER UPDATE经过多次拖延,我终于GitHubbed并用我自己使用的最终解决方案更新了这个.它甚至还有一些最后的修改,以使它更甜!如果你正在寻找旧的jsFiddle,请看这个.

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

快速链接

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

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

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

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

BONUS Flavor(需要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:我:s'
    • 'isoYearWeek'=='Y \\ WW'
    • 'isoYearWeek2'=='Y - \\ WW'
    • 'isoYearWeekDay'=='Y \\ WWj'
    • 'isoYearWeekDay2'=='Y - \\ WW-j'
    • 'mySQL'=='Ymd h:i:s'
    • 'postgreSQL'=='Yz'
    • 'postgreSQL2'=='Yz'
    • 'soap'=='Ymd \\ TH:我:su'
    • 'soap2'=='Ymd \\ TH:我:s.uP'
    • 'unixTimestamp'=='@U'
    • 'xmlrpc'=='Ymd \\ TG:i:s'
    • 'xmlrpcCompact'=='Ymd \\ tGis'
    • 'wddx'=='Ynj \\ TG:我:s'
  • "常量"
    • 'AMERICAN'=='F j Y'
    • 'AMERICANSHORT'=='m/d/Y'
    • 'AMERICANSHORTWTIME'=='m/d/Y h:i:sA'
    • 'ATOM'=='Ymd \\ TH:我:sP'
    • 'COOKIE'=='我dMY H:我:是T'
    • 'EUROPEAN'=='j FY'
    • 'EUROPEANSHORT'=='dmY'
    • 'EUROPEANSHORTWTIME'=='dmY H:i:s'
    • 'ISO8601'=='Ymd \\ TH:我:sO'
    • '法律'=='j FY'
    • 'RFC822'=='D d M y H:i:s O'
    • 'RFC850'=='我的H:我:是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:我:sP'
    • 'RSS'=='D d MYH:i:s O'
    • 'W3C'=='Ymd \\ TH:我:sP'
  • '漂亮'
    • '漂亮'一个'=='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'
    • 'pretty-f'=='g:iA'

您可能会注意到,您可以使用double \来转义角色.


  • @KamranAhmed将近2年40多个选票,我认为努力是值得的.大声笑.我已经个人扩展了这个类,但是没有上传,因为我认为大多数人会使用我推荐的其他js日期插件,但我想我应该让它更"公开"并将其添加到这里. (14认同)
  • moment.js现在是你最近会使用的东西 (14认同)
  • 赞成努力和轻量级! (2认同)

Dam*_*ica 182

最短的.

要获得"2018-08-03"之类的格式:

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

console.log(today)
Run Code Online (Sandbox Code Playgroud)

要获得"8/3/2018"之类的格式:

let today = new Date().toLocaleDateString()

console.log(today)
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么这不是公认的答案,最简单并使用内置函数 (4认同)
  • 由于时区偏移,此操作仍然失败。 (2认同)

Mar*_*hal 157

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

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

document.write(today);
Run Code Online (Sandbox Code Playgroud)

  • 这似乎是实际回答这个问题的唯一答案.其他人都会回答如何将日期格式化为字符串. (37认同)
  • 我也同意。完美回答了问题。谢谢。 (2认同)

Jim*_*y M 99

试试这个:

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

结果就像

15/2/2012
Run Code Online (Sandbox Code Playgroud)


ben*_*een 66

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

  • 这是我找到的最佳时间库! (10认同)
  • 支持本地化,如魅力. (7认同)
  • 发布此刻后的六年,js发挥了相当大的作用。您可能要改用https://github.com/iamkun/dayjs-我对它的描述是“节食中的momentjs”。相同的简单API。 (2认同)

Mor*_*rad 54

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

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

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

  • 只是获取当前日期的时刻太过分了. (27认同)
  • 最佳答案,MomentJs看起来很棒. (8认同)

小智 48

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

document.write(d)
Run Code Online (Sandbox Code Playgroud)

把它分解成几个步骤:

  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"

  • 你可以通过这样做来节省一些字节:`Date().split('').splice(1,3).join('')` (3认同)
  • 我需要00:00:00的时间,不想手动重建它; 第2步让我完美无缺.奖励! (2认同)
  • 感谢您的分解! (2认同)

ros*_*han 46

每次都有效:

    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);
Run Code Online (Sandbox Code Playgroud)


Dun*_*xim 43

var date = new Date().toLocaleDateString("en-US");
Run Code Online (Sandbox Code Playgroud)

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

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

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


Ode*_*ner 29

更清洁,更简单的版本:

new Date().toLocaleString();
Run Code Online (Sandbox Code Playgroud)

结果用户的区域设置而异:

2/27/2017,9:15:41 AM


Aun*_*tet 24

如果您对YYYY-MM-DD格式感到满意,这也可以完成.

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

2018-03-10


eom*_*off 23

您可以使用Date.js库来扩展 Date对象,因此您可以使用.today()方法.

  • 如果你使用带有日期选择器的jquery ui,你可以使用$ .datepicker.formatDate('yy/mm/dd',new Date()) (11认同)

Shu*_*kar 23

大多数其他答案都提供带时间的日期。
如果你只需要约会。

new Date().toISOString().split("T")[0]
Run Code Online (Sandbox Code Playgroud)

输出

[ '2021-02-08', '06:07:44.629Z' ]
Run Code Online (Sandbox Code Playgroud)

如果你想要它的/格式,请使用replaceAll.

new Date().toISOString().split("T")[0].replaceAll("-", "/")
Run Code Online (Sandbox Code Playgroud)

如果您想要其他格式,那么最好使用momentjs.


Jos*_*jas 18

您可以像现在这样获取当前日期调用静态方法:

var now = Date.now()
Run Code Online (Sandbox Code Playgroud)

参考:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/now


use*_*062 16

Varun的答案没有考虑TimezoneOffset.这是一个版本:

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

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


Bla*_*son 14

最短的答案是: new Date().toJSON().slice(0,10)


jaf*_*ech 11

因为toISOString()只返回当前的UTC时间,而不是本地时间.我们必须使用'.toString()'函数来设置日期,以获取日期yyyy-MM-dd格式

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('T')[0]);
Run Code Online (Sandbox Code Playgroud)

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

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('.')[0]);
Run Code Online (Sandbox Code Playgroud)

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

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


Phi*_*tts 10

如果你想要一个简单的DD/MM/YYYY格式,我只想出这个简单的解决方案,虽然它没有前缀缺失的零.

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


小智 10

new Date().toDateString();
Run Code Online (Sandbox Code Playgroud)

结果:

"2016年2月3日星期三"


Tou*_*eur 9

new Date().toISOString().slice(0,10); 
Run Code Online (Sandbox Code Playgroud)

也会工作


Kam*_*ski 8

尝试

`${Date()}`.slice(4,15)
Run Code Online (Sandbox Code Playgroud)

我们在这里使用标准的 JS 功能:模板文字、转换为字符串的Date 对象slice。这可能是满足 OP 要求的最短解决方案(没有时间,只有日期)

  • @JaydeepShil - 这是 javascript 解决方案 - 如果您不相信运行上面的代码片段或将其复制粘贴到 chrome 控制台 (2认同)

Con*_*tin 8

使用内置的 JSDate.prototype.toLocaleDateString() 来自 MDN 文档:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

const options = { 
  month: '2-digit', 
  day: '2-digit',
  year: 'numeric', 
};

console.log(new Date().toLocaleDateString('en-US', options)); // mm/dd/yyyy
Run Code Online (Sandbox Code Playgroud)


小智 8

// Try this simple way

const today = new Date();
let date = today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate();
console.log(date);
Run Code Online (Sandbox Code Playgroud)


Rog*_*ger 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>
Run Code Online (Sandbox Code Playgroud)

HTML是

<body onload='return my_curr_date();'>
    <input type='text' name='dateField' id='dateField' value='' />
</body>
Run Code Online (Sandbox Code Playgroud)


Cam*_*hue 7

一线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 latest,&chrome返回todaysDate = "2/7/2017"
"工作"*在IE10 +中

编辑2/7/2017

我发现IE10和IE Edge做的事情有点不同......去看看.同new Date(Date.now()).toLocaleString()作为输入,

IE10返回:

"Tuesday, February 07, 2017 2:58:25 PM"
Run Code Online (Sandbox Code Playgroud)

我可以写一个很长的函数和FTFY.但你真的应该使用moment.js这个东西.我的脚本只是清理它并为您提供扩展的传统美国符号:> todaysDate = "March 06, 2017"

IE EDGE返回:

"?2?/?7?/?2017? ?2?:?59?:?27? ?PM"
Run Code Online (Sandbox Code Playgroud)

当然,这可不容易.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];
Run Code Online (Sandbox Code Playgroud)

这很糟糕.怎么样:

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];
Run Code Online (Sandbox Code Playgroud)

原始答案

我有一个单行代表:

new Date(Date.now()).toLocaleString().split(', ')[0];
Run Code Online (Sandbox Code Playgroud)

[1]会给你一天的时间.


Har*_*osh 7

如果您\xe2\x80\x99想要格式化为字符串。

\n
statusUpdate = "time " + new Date(Date.now()).toLocaleTimeString();\n
Run Code Online (Sandbox Code Playgroud)\n

输出:“时间 11:30:53 AM”

\n


小智 7

实现这一目标的直接方法(同时考虑到您当前的时区,它利用了 ISO yyyy-mm-dd 格式)是:

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

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

Date.parse(d); // 1582044297000
Run Code Online (Sandbox Code Playgroud)


小智 6

你可以结帐这个

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

并查看 Date() 构造函数的文档。 关联

在 React js 中获取当前日期月份年份


mar*_*rix 6

如果到“当前日期”你正在考虑“今天”,那么这个技巧可能对你有用:

> new Date(3600000*Math.floor(Date.now()/3600000))
2020-05-07T07:00:00.000Z
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您将获得今天的日期实例,时间为 0:00:00。

操作原理很简单:我们取当前时间戳,将其划分为 1 天,以毫秒表示。我们会得到一小部分。通过使用Math.floor,我们去掉了分数,所以我们得到一个整数。现在,如果我们将其乘以一天(再次 - 以毫秒为单位),我们将获得一个日期时间戳,其时间正好在一天的开始。

> new Date(3600000*Math.floor(Date.now()/3600000))
2020-05-07T07:00:00.000Z
Run Code Online (Sandbox Code Playgroud)

干净简单。


Sou*_*vik 6

如果你正在使用jQuery.尝试这一个班轮:

$.datepicker.formatDate('dd/mm/yy', new Date());
Run Code Online (Sandbox Code Playgroud)

以下是格式化日期的约定

  • d - 月中的某一天(没有前导零)
  • dd - 月中的一天(两位数)
  • o - 一年中的一天(没有前导零)
  • 一年中的一天(三位数)
  • D - 天名称短
  • DD - 天名长
  • m - 一年中的月份(无前导零)
  • mm - 一年中的一个月(两位数)
  • M - 月名短
  • MM - 月份名称长
  • y - 年(两位数)
  • yy - 年(四位数)

这是jQuery datepicker的参考


Yug*_*ari 6

这是很好的格式化日期

let date = new Date().toLocaleDateString("en", {year:"numeric", day:"2-digit", month:"2-digit"});
console.log(date);
Run Code Online (Sandbox Code Playgroud)


ani*_*tha 6

这有很多作用;

    var today = new Date();
    var date = today.getFullYear()+'/'+(today.getMonth()+1)+'/'+today.getDate();
    document.write(date);
Run Code Online (Sandbox Code Playgroud)

today.getFullYear()获得当年,

today.getMonth()+1获取当前月份

today.getDate()获取今天的日期。所有这些都用“/”连接起来。


Jas*_*Jas 5

var dateTimeToday = new Date();
var dateToday = new Date(
    dateTimeToday.getFullYear(), 
    (dateTimeToday.getMonth() + 1) /*Jan = 0! */, 
    dateTimeToday.getDate(), 
    0, 
    0, 
    0, 
    0);
Run Code Online (Sandbox Code Playgroud)


ISO*_*MAn 5

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

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


Ion*_*Man 5

这么多复杂的答案...

只需使用new Date(),如果您需要它作为字符串,只需使用new Date().toISOString()

享受!