原文:JavaScript Date Now – How to Get the Current Date in JavaScript,作者:Vijit Ail
你建立的许多应用程序将有某种日期,可能是资源的创建日期,或者是活动的时间戳。
处理日期和时间戳的格式可能会很累。在本指南中,你将学习如何在 JavaScript 中以各种格式获得当前日期。
JavaScript 有一个内置的 Date
对象,用来存储日期和时间,并提供处理它们的方法。
要创建一个新的 Date
对象的实例,请使用 new
关键字。
const date = new Date();
Date
对象包含一个 Number
,代表自纪元(即 1970 年 1 月 1 日)以来的毫秒数。
你可以向 Date
构造函数传递一个日期字符串,为指定日期创建一个对象。
const date = new Date('Jul 12 2011');
要获得当前年份,请使用 Date
对象的 getFullYear()
实例方法。getFullYear()
方法返回 Date
构造函数中指定日期的年份。
const currentYear = date.getFullYear();
console.log(currentYear); //2020
同样的,也有一些方法可以获得当前月份的日期和当前月份。
const today = date.getDate();
const currentMonth = date.getMonth() + 1;
getDate()
方法返回当前月份的日期(1-31)。
getDate()
方法返回指定日期的月份。关于 getDate()
方法需要注意的一点是,它返回以 0 为索引初始值的值(0-11),其中 0 代表 1 月,11 代表 12 月。因此要加上 1 来使月份的值正常化。
Date now
now()
是 Date
对象的一个静态方法。它返回以毫秒为单位的值,代表从纪元开始所经过的时间。你可以将 now()
方法返回的毫秒数传入 Date
构造函数,以实例化一个新的 Date
对象。
const timeElapsed = Date.now();
const today = new Date(timeElapsed);
格式化日期
你可以使用 Date
对象的方法将日期格式化为多种格式(GMT、ISO 等等)。
toDateString()
方法以人类可读的格式返回日期:
today.toDateString(); // "Sun Jun 14 2020"
toISOString()
方法返回遵循 ISO 8601 扩展格式的日期:
today.toISOString(); // "2020-06-13T18:30:00.000Z"
toUTCString()
方法以 UTC 时区格式返回日期:
today.toUTCString(); // "Sat, 13 Jun 2020 18:30:00 GMT"
toLocaleDateString()
方法以对地域敏感的格式返回日期:
today.toLocaleDateString(); // "6/14/2020"
你可以在 MDN 文档中找到 Date
方法的完整参考资料。
自定义日期格式化功能
除了上节提到的格式外,你的应用程序可能有不同的数据格式。它可能是 yy/dd/mm
或 yyyy-dd-mm
格式,或类似的格式。
为了解决这个问题,最好是创建一个可重复使用的函数,这样它就可以在多个项目中使用。
因此,在本节中,让我们创建一个实用的函数,它将以函数参数中指定的格式返回日期。
const today = new Date();
function formatDate(date, format) {
//
}
formatDate(today, 'mm/dd/yy');
你需要用参数中传递的格式字符串中各自的月、日、年值替换字符串 “mm”、”dd”、”yy”。
要做到这一点,你可以使用 replace()
方法,如下图所示:
format.replace('mm', date.getMonth() + 1);
但这将导致大量的方法链,虽然函数更加灵活了,但是它更加难以维护。
format.replace('mm', date.getMonth() + 1)
.replace('yy', date.getFullYear())
.replace('dd', date.getDate());
你可以通过 replace()
方法来使用正则表达式,而不是使用链式方法。
首先创建一个对象,它将代表子串的键值对和它各自的值。
const formatMap = {
mm: date.getMonth() + 1,
dd: date.getDate(),
yy: date.getFullYear().toString().slice(-2),
yyyy: date.getFullYear()
};
接下来,使用正则表达式来匹配和替换这些字符串。
formattedDate = format.replace(/mm|dd|yy|yyy/gi, matched => map[matched]);
完整的函数是这样的:
function formatDate(date, format) {
const map = {
mm: date.getMonth() + 1,
dd: date.getDate(),
yy: date.getFullYear().toString().slice(-2),
yyyy: date.getFullYear()
}
return format.replace(/mm|dd|yy|yyy/gi, matched => map[matched])
}
你还可以在函数中添加格式化时间戳的能力。
总结
我希望你现在对 JavaScript 中的 Date
对象有了更好的理解。你也可以使用其他第三方库,如 datesj
和 moment
来处理你的应用程序中的日期。
在 freeCodeCamp 免费学习编程。 freeCodeCamp 的开源课程已帮助 40,000 多人获得开发者工作。开始学习