如何在 JavaScript 中获取当前日期?
Posted
技术标签:
【中文标题】如何在 JavaScript 中获取当前日期?【英文标题】:How do I get the current date in JavaScript? 【发布时间】:2010-12-04 14:29:42 【问题描述】:【问题讨论】:
var currentTime = new Date();
见documentation for the Date object。它有例子。
这会帮助你tizag.com/javascriptT/javascriptdate.php
new Date()
返回当前时间,而不是当前日期。如果您尝试将其与另一个没有时间成分的日期(即午夜)进行比较,则区别很重要。
使用momentJs,这个库对开发者来说是黄金。
【参考方案1】:
var date = new Date().toLocaleDateString("en-US");
另外,您可以使用两个参数调用方法toLocaleDateString
:
var date = new Date().toLocaleDateString("en-US",
"year": "numeric",
"month": "numeric"
);
有关此方法的更多信息,请访问MDN。
【讨论】:
很好,适用于 Chrome。不幸的是,截至 2016 年 4 月 22 日,它不适用于 PhantomJS 很酷的解决方案。应该在顶部。new Date().toLocaleDateString("de-de")
对我有用。【参考方案2】:
使用Date.prototype.toLocaleDateString()
内置的JS
来自 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
更新:我们可以使用 Intl.DateTimeFormat
获得类似的行为,它具有不错的 browser support。类似于toLocaleDateString()
,我们可以传递一个带有选项的对象:
const date = new Date('Dec 2, 2021') // Thu Dec 16 2021 15:49:39 GMT-0600
const options =
day: '2-digit',
month: '2-digit',
year: 'numeric',
new Intl.DateTimeFormat('en-US', options).format(date) // '12/02/2021'
【讨论】:
【参考方案3】:你试过Date.js吗?
毫秒
date.js.millisecond(); // 0.00
秒
date.js.second(); // 58
分钟
date.js.minute(); // 31
小时
date.js.hour(); // 6 (PM)
天
date.js.day(); // Monday
周
date.js.week(); // (Week Of the Month / WOM) => 2
月份
date.js.month(); // (Month) => November
TLM(三个字母月)
date.js.tlmonth(); // (Month) => Dec
年份
date.js.year(); // (Year / String: "") => "2021"
季节
date.js.season(); // (Fall / Season: seasons) => "fall"
上午/下午的当前时间
date.js.time(); // (Time / Zone: "PDT/EDT etc.") => 10:04 AM
【讨论】:
【参考方案4】:更干净、更简单的版本:
new Date().toLocaleString();
结果因用户的区域设置而异:
2017 年 2 月 27 日上午 9:15:41
【讨论】:
【参考方案5】:大多数其他答案都提供日期和时间。 如果你只需要日期。
new Date().toISOString().split("T")[0]
输出
[ '2021-02-08', '06:07:44.629Z' ]
如果您想要/
格式,请使用replaceAll
。
new Date().toISOString().split("T")[0].replaceAll("-", "/")
如果您想要其他格式,那么最好使用momentjs
。
【讨论】:
谢谢!我知道 date 必须有一个字符串方法,我不知道为什么每个人都在解析日期和月份和年份并连接..即使你想要破折号:Date().toISOString().split('T')[ 0].replaceAll('/','-') 是的,也许他们有别的想法。【参考方案6】:我的方式
let dateString = new Date().toLocaleString().split(',').find(() => true);
【讨论】:
【参考方案7】:// Try this simple way
const today = new Date();
let date = today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate();
console.log(date);
【讨论】:
答案很棒。但对于最佳实践,请提供解释。您只发布代码会使 OP 和未来的 commers 复制并粘贴您的答案,而不了解答案背后的逻辑。请提供一些解释的答案。谢谢!【参考方案8】:你可以看看这个
var today = new Date();
today = parseInt(today.getMonth()+1)+'/'+today.getDate()+'/'+today.getFullYear()+"\nTime : "+today.getHours()+":"+today.getMinutes()+":"+today.getSeconds();
document.write(today);
并查看 Date() 构造函数的文档。 link
Get Current Date Month Year in React js
【讨论】:
【参考方案9】:这很重要;
var today = new Date();
var date = today.getFullYear()+'/'+(today.getMonth()+1)+'/'+today.getDate();
document.write(date);
today.getFullYear() 获取当前年份,
today.getMonth()+1 获取当前月份
和 today.getDate() 获取今天的日期。 所有这些都与'/'连接。
【讨论】:
纯代码答案在 Stack Overflow 上的价值很低,因为它们在教育/授权 OP 和成千上万的未来研究人员方面做得很差。 为什么是 today.getMonth()+1 ?【参考方案10】:这么多复杂的答案...
只需使用new Date()
,如果您需要它作为字符串,只需使用new Date().toISOString()
享受吧!
【讨论】:
【参考方案11】:Date.prototype.toLocalFullDateStringYYYYMMDDHHMMSS = function ()
if (this != null && this != undefined)
let str = this.getFullYear();
str += "-" + round(this.getMonth() + 1);
str += "-" + round(this.getDate());
str += "T";
str += round(this.getHours());
str += ":" + round(this.getMinutes());
str += ":" + round(this.getSeconds());
return str;
else
return this;
function round(n)
if(n < 10)
return "0" + n;
else return n;
;
【讨论】:
【参考方案12】:如果在“当前日期”之前您正在考虑“今天”,那么这个技巧可能对您有用:
> new Date(3600000*Math.floor(Date.now()/3600000))
2020-05-07T07:00:00.000Z
这样你就得到了今天Date 时间为0:00:00 的实例。
操作原理很简单:我们取当前时间戳,除以 1 天,单位为毫秒。我们会得到一小部分。通过使用Math.floor,我们去掉了分数,所以我们得到了一个整数。现在,如果我们将其乘以一天(同样 - 以毫秒为单位),我们会得到一个日期时间戳,其时间正好在一天的开始。
> now = Date.now()
1588837459929
> daysInMs = now/3600000
441343.73886916664
> justDays = Math.floor(daysInMs)
441343
> today = justDays*3600000
1588834800000
> new Date(today)
2020-05-07T07:00:00.000Z
干净简单。
【讨论】:
在哪里解释了这个答案的工作原理以及为什么你觉得这是个好建议? 不明白这突如其来的攻击是从哪里来的?我没有看到您对其他答案提出了这个问题?我可以知道为什么我会以这种方式获得奖励吗? 我不明白你为什么觉得这是一次攻击。是的,我确实吹响了(几个)其他仅代码的答案。您可以编辑您的帖子。请改进它,以教育/授权成千上万的未来研究人员。 在粗暴的高帽子命令句之后很难不给人一种攻击的印象。我很乐意改进我的答案,但请下次不要假设您有权命令周围的人。我非常感谢您的关心和您为使 *** 变得更好的时间,但请相信我,如果您要从高处待人,没有人愿意与您合作。就像句子“你能解释一下这个答案是如何工作的吗?为什么你觉得这是个好建议?”在我眼里听起来好多了,然后“在哪里……”。你明白我在说什么吗? 我也可以这样回答:这是你自我欣赏的方式吗? :) 但我不打算继续这个对话,因为我发现它不会导致任何结果。【参考方案13】:试试
`$Date()`.slice(4,15)
console.log( `$Date()`.slice(4,15) )
我们在这里使用标准 JS 功能:template literals、Date object(转换为字符串)和slice。这可能是满足 OP 要求的最短解决方案(没有时间,只有日期)
【讨论】:
问题是针对javascript的。 @JaydeepShil - 这是 javascript 解决方案 - 如果您不相信在 sn-p 之上运行或将其复制粘贴到 chrome 控制台 伟大而简洁的解决方案!!谢谢【参考方案14】:适用于寻找此类日期格式的人2020 年 4 月 9 日
function getDate()
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
var today = new Date();
var dd = String(today.getDate()).padStart(2, '0');
var mm = months[today.getMonth()];
var yyyy = today.getFullYear();
today = dd + "-" + mm + "-" + yyyy;
return today;
getDate();
【讨论】:
【参考方案15】:实现这一目标的一种直接方法是:
let d = new Date().toISOString().substring(0,19).replace("T"," ") // "2020-02-18 16:41:58"
通常,这是一种非常通用的兼容日期格式,如果需要,您可以将其转换为纯日期值:
Date.parse(d); // 1582044297000
【讨论】:
【参考方案16】:TL;DR
这里找到的大多数答案都是正确的系统)。
可靠来源是:
Web 服务器的时钟(但请确保它已更新) 时间 API 和 CDN详情
在Date
实例上调用的方法将根据您机器的本地时间返回一个值。
更多详情请见“MDN 网络文档”:JavaScript Date object。
为方便起见,我从他们的文档中添加了相关注释:
(...) 获取日期和时间或其组件的基本方法都在本地(即主机系统)时区和偏移量中工作。
提到这一点的另一个来源是:JavaScript date and time object
请务必注意,如果某人的时钟差了几个小时,或者他们处于不同的时区,那么 Date 对象将创建与您自己计算机上创建的时间不同的时间。
您可以使用的一些可靠来源是:
您的网络服务器的时钟(首先检查它是否设置正确) 时间 API 和 CDN: https://timezonedb.com/api http://worldtimeapi.org http://worldclockapi.com http://www.geonames.org/export/ws-overview.html 其他相关API:https://www.programmableweb.com/category/time/api但是,如果准确性对您的用例并不重要,或者您只需要相对于本地机器时间的日期,那么您可以安全地使用 Javascript 的 Date
基本方法,例如 Date.now()
。
【讨论】:
【参考方案17】:试试这个,你可以相应地调整日期格式:
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1;
var yyyy = today.getFullYear();
if (dd < 10)
dd = '0' + dd;
if (mm < 10)
mm = '0' + mm;
var myDate= dd + '-' + mm + '-' + yyyy;
【讨论】:
【参考方案18】:如果您只需要字符串表示,那么只需使用:
Date();
【讨论】:
那不是真的。日期()->“2020 年 11 月 14 日星期六 09:23:28 GMT-0600(中部标准时间)”。请扭转您的负分处罚。 谢谢。我很感激。【参考方案19】:要获取日期,然后将其内置到 javascript 中:
new Date();
如果您正在寻找日期格式,并且无论如何您都在为您的网站使用 Kendo JQuery UI 库,那么我建议使用内置的 kendo 函数:
kendo.toString(new Date(), "yyMMdd"); //or any other typical date format
获取支持格式的完整列表see here
【讨论】:
【参考方案20】:我的解决方案使用字符串文字Find out more...
// Declare Date as d
var d = new Date()
// Inline formatting of Date
const exampleOne = `$d.getDay()-$d.getMonth() + 1-$d.getFullYear()`
// January is 0 so +1 is required
// With Breaklines and Operators
const exampleTwo = `+++++++++++
With Break Lines and Arithmetic Operators Example
Year on newline: $d.getFullYear()
Year minus(-) 30 years: $d.getFullYear() - 30
You get the idea...
+++++++++++`
console.log('=============')
console.log(exampleOne)
console.log('=============')
console.log(exampleTwo)
【讨论】:
【参考方案21】:最新编辑: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 returntodaysDate = "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]
会给你一天中的时间。
【讨论】:
【参考方案22】:这很好得到格式化日期
let date = new Date().toLocaleDateString("en", year:"numeric", day:"2-digit", month:"2-digit");
console.log(date);
【讨论】:
【参考方案23】:已更新!,向下滚动
如果你想要一些对最终用户来说简单漂亮的东西...... 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 更新经过长时间的拖延,我终于GitHubbed 并用我自己使用的最终解决方案更新了这个。它甚至在最后一刻进行了一些编辑以使其更甜美!如果您正在寻找旧的jsFiddle, please see this。
此更新有 2 种风格,虽然没有我上面的原始答案那么小,但仍然相对较小。如果你想要非常小,那就去吧。 另请注意:这仍然没有 moment.js 臃肿。虽然 moment.js 很好,但 imo,它有太多世俗的方法,需要像学习语言一样学习 moment。我这里使用与PHP: date相同的通用格式。
快速链接
Date.format.min.js 5.08 KB dateFormat.min.js 4.16 KB风味 1
new Date().format(String)
我个人的最爱。我知道禁忌,但在日期对象上效果很好。请注意您可能对 Date 对象使用的任何其他 mod。
// use as simple as
new Date().format('m-d-Y h:i:s'); // 07-06-2016 06:38:34
风味 2
dateFormat(Date, String)
更传统的多合一方法。具有前一个的所有能力,但通过带日期参数的方法调用。
// use as simple as
dateFormat(new Date(), 'm-d-Y h:i:s'); // 07-06-2016 06:38:34
BONUS Flavor(需要 jQuery)
$.date(Date, String)
这不仅仅是一个简单的format
选项。它扩展了基本的 Date 对象并包括诸如addDays
之类的方法。更多信息请查看Git。
在这个模组中,格式字符的灵感来自PHP: date。如需完整列表,请查看我的README
这个模组还有更长的预制格式列表。要使用预制格式,只需输入其键名。 dateFormat(new Date(), 'pretty-a');
如您所见,您可以使用双精度 \
转义字符。
【讨论】:
@KamranAhmed 差不多 2 年和 40 多票之后,我会说努力是值得的。哈哈。从那以后我个人扩展了这门课,但没有上传,因为我认为大多数人会使用我推荐的其他 js 日期插件,但我想我应该让它更“公开”并在这里添加。 moment.js 现在是你现在使用的东西 上面,有一个错字(我花了一段时间才发现),它在行中使用了一个变量“today”:“dayOfMonth = today +” "today + ( objToday.getDate() 【参考方案24】:能够以自定义格式呈现并在不同的语言环境中使用月份名称:
const locale = 'en-us';
const d = new Date(date);
const day = d.getDate();
const month = d.toLocaleString(locale, month: 'long' );
const year = d.getFullYear();
const time = d.toLocaleString(locale, hour12: false, hour: 'numeric', minute: 'numeric');
return `$month $day, $year @ $time`; // May 5, 2019 @ 23:41
【讨论】:
【参考方案25】:这每次都有效:
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);
【讨论】:
【参考方案26】:使用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;
更改为您想要的任何格式。
【讨论】:
感谢代码.. 但我仍然不明白,if(dd @imin:因为少于 2 个字符意味着 1 个字符......而 10(1 到 9)以下的所有内容都是 1 个字符,所以我们将有01
、02
、.. ., 09
@MounaCheikhna - 999 年我们怎么可能?
如果您不在北美,请交换月份和日期。
新的Date.prototype.toLocaleDateString()
方法是一种更灵活的解决方案。它是自 ECMAScript 5.1 以来 JavaScript 的一部分,并且得到了常青浏览器的良好支持。 MDN: toLocaleDateString()
【参考方案27】:
此答案适用于寻找具有类似 ISO-8601 格式和时区的日期的人。 对于那些不想包含任何日期库的人来说,它是纯 JS。
var date = new Date();
var timeZone = date.toString();
//Get timezone ( 'GMT+0200' )
var timeZoneIndex = timeZone.indexOf('GMT');
//Cut optional string after timezone ( '(heure de Paris)' )
var optionalTimeZoneIndex = timeZone.indexOf('(');
if(optionalTimeZoneIndex != -1)
timeZone = timeZone.substring(timeZoneIndex, optionalTimeZoneIndex);
else
timeZone = timeZone.substring(timeZoneIndex);
//Get date with JSON format ( '2019-01-23T16:28:27.000Z' )
var formattedDate = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toJSON();
//Cut ms
formattedDate = formattedDate.substring(0,formattedDate.indexOf('.'));
//Add timezone
formattedDate = formattedDate + ' ' + timeZone;
console.log(formattedDate);
在控制台中打印类似这样的内容:
2019-01-23T17:12:52 GMT+0100
JSFiddle : https://jsfiddle.net/n9mszhjc/4/
【讨论】:
【参考方案28】:如果您希望格式化为字符串。
statusUpdate = "time " + new Date(Date.now()).toLocaleTimeString();
输出“时间 11:30:53 AM”
【讨论】:
为什么是 Date.now()? var x = new Date(Date.now()).toLocaleTimeString(); var y = new Date().toLocaleTimeString(); x === y【参考方案29】:如果您希望对日期格式进行更精细的控制,我强烈建议您查看 date-FNS。很棒的库 - 比 moment.js 小得多,它基于函数的方法使其比其他基于类的库快得多。提供超过日期所需的大量操作。
https://date-fns.org/docs/Getting-Started
【讨论】:
【参考方案30】:尽可能短。
要获得像“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)
另外,您可以将locale 作为参数传递,例如toLocaleDateString("sr")
等。
【讨论】:
由于时区偏移,这仍然失败。 你的第二个答案是最好的。 请注意,这将返回 UTC+0 的日期,而不是本地日期。以上是关于如何在 JavaScript 中获取当前日期?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Angular 8 或 javascript 中明智地获取当前日期每周日