原文:JavaScript Date Now – How to Get the Current Date in JavaScript,作者:Vijit Ail

你建立的许多应用程序将有某种日期,可能是资源的创建日期,或者是活动的时间戳。

处理日期和时间戳的格式可能会很累。在本指南中,你将学习如何在 JavaScript 中以各种格式获得当前日期。

JavaScript 的 Date 对象

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/mmyyyy-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 对象有了更好的理解。你也可以使用其他第三方库,如 datesjmoment 来处理你的应用程序中的日期。