【Javascript修炼篇】你知道多少操作日期和时间的DateUtils

JavaScript 的 Date 对象堪称绝妙,它内置了众多方法来处理日期。这些方法用于提取日期的各个部分、修改给定的日期以及支持不同的时间转换等。虽然有许多第三方库如 moment.jsDate-fnsDay.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 的设置,星期名称会相应变化。你可以根据应用程序运行的地区提供可配置的 localenavigator.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

你也可以使用 toLocaleStringtoISOString 方法仅获取时间部分,就像获取日期部分一样。

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;
}

只需将上述代码片段中的 + 替换成 - 即可实现减月操作。

以上就是我目前遇到的一些实用函数。如果你需要更多功能,请在下方留言,我很乐意更新这篇文章。

谢谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值