JavaScript 的 Date
对象堪称绝妙,它内置了众多方法来处理日期。这些方法用于提取日期的各个部分、修改给定的日期以及支持不同的时间转换等。虽然有许多第三方库如 moment.js
、Date-fns
和 Day.js
可以用来处理日期和时间,但并非每次我们都需要依赖它们。
好了,让我们开始吧。
JavaScript 的 Date
对象会使用浏览器的时间区并返回当前的日期。例如,当你在浏览器控制台输入 new Date();
,你会看到类似这样的输出:Tue Mar 01 2022 09:52:43 GMT+0530 (India Standard Time)
。不过,别期待在不同地区会得到相同的结果哦!
获取今天的日期和时间
这里有一些日常工作中可能需要用到的实用函数:
getToday()
function getTodayObj() {
return new Date();
} // 返回可应用所有日期方法的日期对象。
// 示例输出:Tue Mar 01 2022 10:42:34 GMT+0530 (India Standard Time)
function getTodayString() {
return Date();
} // 返回日期的字符串格式。
// 示例输出:'Tue Mar 01 2022 10:43:24 GMT+0530 (India Standard Time)'
function getTodayMilliSeconds() {
return Date.now();
} // 返回今天的毫秒数。
// 示例输出:1646111650943
function getTodayUtcString() {
return new Date().toUTCString();
} // 返回今天的 UTC 字符串。
// 示例输出:Tue, 01 Mar 2022 05:14:22 GMT
function getTodayUtcTZFormat() {
return new Date().toISOString();
} // 返回今天的 UTC 时间格式(ISO)。
// 示例输出:2022-03-01T05:14:42.479Z
计算日期差异
在深入代码之前,我们需要理解一些基本概念:
- 当你在日期对象上使用
+, -
操作时,它会被强制转换为数字,并返回日期的毫秒值。 - 你可以通过
new Date('date string')
创建日期对象。 - 我们通常如何计算每天的毫秒数?24小时 * 60分钟 * 60秒 * 1000毫秒 = 86400000 毫秒每天。
现在,我们可以轻松理解如何计算日期差异了。
const date1 = new Date('02/01/2022');
const date2 = new Date('02/28/2022');
function getDateDifference(date1, date2) {
return (date2 - date1) / (1000 * 60 * 60 * 24);
} // 输出:27
如果 date2
小于 date1
而你仍然想要一个正数结果,只需使用 Math.abs(getDateDifference());
。
如果你只需要毫秒数的差异,直接做 date2 - date1
就行了。
如果你想包括时间在内的差异,使用同样的方法。获取你的日期和时间的毫秒数,然后传递给这个函数即可。
getDateTimeInMilliseconds()
function getDateTimeInMilliseconds() {
return new Date(2022, 02, 01, 00, 00, 00, 0).getTime();
} // 输出:1646073000000
getUnixTimeStamp()
这是 getDateTimeInMilliseconds() / 1000
。
function getUnixTimeStamp() {
return new Date(2022, 02, 01, 00, 00, 00, 0).getTime() / 1000;
} // 输出:1646073000
getUTCMilliseconds()
function getUtcInMilliseconds() {
return Date.UTC(2022, 02, 01, 00, 00, 00, 0);
} // 输出:1646092800000
getDayName()
function getDayName() {
return new Date().toLocaleDateString('en-US', { weekday: 'short'});
} // 输出:Tue
toLocaleDateString
方法的第一个参数是 locales
,表示地理区域;第二个参数 options
可以是 { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }
。
在上面的代码片段中,我们使用了 { weekday: 'short'}
来获得缩写星期名,如 Tue
。而 { weekday: 'narrow'}
会给出单字母的星期名,如 T
;{ weekday: 'long'}
则给出完整的星期名称,如 Tuesday
。
根据 locale
的设置,星期名称会相应变化。你可以根据应用程序运行的地区提供可配置的 locale
。navigator.language
可以给出客户端的语言,默认值为 en-US
。
对于月份名称也是一样的道理。只需将 { weekday: 'short'}
替换为 { month: 'short'}
即可。
getMonthName()
function getMonthName() {
return new Date().toLocaleDateString('en-US', { month: 'short'});
} // 输出:Mar
getDateOnly()
// 你可以用 / 替换 - 来获得 dd/mm/yyyy 格式
function getDateOnly() {
const date = new Date();
return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
} // 输出:2022-3-1
// 格式:mm/dd/yyyy
function getDateOnly() {
return new Date().toLocaleDateString('en-US', {day: '2-digit', month: '2-digit', year: 'numeric'});
} // 输出:03/01/2022
// 格式:dd/mm/yyyy
function getDateOnly() {
return new Date().toLocaleDateString('en-GB');
} // 输出:01/03/2022
// 使用 localeString,格式:mm/dd/yyyy
function getDateOnly() {
return new Date().toLocaleString().split(',')[0];
} // 输出:3/1/2022
// 使用 toISOString,格式:yyyy-mm-dd
function getDateOnly() {
return new Date().toISOString().split('T')[0];
} // 输出:2022-03-01
getTimeOnly()
function getTimeOnly() {
const date = new Date();
return date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();
} // 输出:17:8:46
// 默认使用 'en-US' 地区
function getTimeOnly() {
return new Date().toLocaleTimeString();
} // 输出:5:10:36 PM
function getTimeOnly() {
return new Date().toLocaleTimeString('en-GB');
} // 输出:17:8:46
你也可以使用 toLocaleString
和 toISOString
方法仅获取时间部分,就像获取日期部分一样。
getTimeInHrsMins()
function getTimeInHrsMins() {
return Intl.DateTimeFormat('en-US', { hour: "numeric", minute: "numeric", hour12: true }).format(new Date());
} // 输出:6:15 PM
getTimezoneName()
function getTimezoneName() {
return Intl.DateTimeFormat().resolvedOptions().timeZone;
} // 输出:Asia/Calcutta
addDay() 和 subtractDay()
function addDay() {
const today = new Date();
const tomorrow = new Date();
tomorrow.setDate(today.getDate() + 1);
return tomorrow;
} // 输出:Wed Mar 02 2022 18:22:40 GMT+0530 (India Standard Time)
function subtractDay() {
const today = new Date();
const yesterday = new Date();
yesterday.setDate(today.getDate() - 1);
return yesterday;
} // 输出:Mon Feb 28 2022 18:23:59 GMT+0530 (India Standard Time)
addMonth()
和 subtractMonth()
同样适用。
addMonth()
function addMonth() {
const today = new Date();
const nextMonthToday = new Date();
nextMonthToday.setMonth(today.getMonth() + 1);
return nextMonthToday;
}
只需将上述代码片段中的 +
替换成 -
即可实现减月操作。
以上就是我目前遇到的一些实用函数。如果你需要更多功能,请在下方留言,我很乐意更新这篇文章。
谢谢阅读!