一、日期和时间的格式化

1、原生方法

1.1、使用 toLocaleString 方法

Date 对象有一个 toLocaleString 方法,该方法可以根据本地时间和地区设置格式化日期时间。例如:

const date = new Date();
console.log(date.toLocaleString('en-US', { timeZone: 'America/New_York' })); // 2/16/2023, 8:25:05 AM
console.log(date.toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })); // 2023/2/16 上午8:25:05

toLocaleString 方法接受两个参数,第一个参数是地区设置,第二个参数是选项,用于指定日期时间格式和时区信息。

1.2、使用 Intl.DateTimeFormat 对象

Intl.DateTimeFormat 对象是一个用于格式化日期和时间的构造函数。可以使用该对象来生成一个格式化日期时间的实例,并根据需要来设置日期时间的格式和时区。例如:

const date = new Date();
const formatter = new Intl.DateTimeFormat('en-US', {
timeZone: 'America/New_York',
year: 'numeric',
month: 'numeric',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
});
console.log(formatter.format(date)); // 2/16/2023, 8:25:05 AM

可以在选项中指定需要的日期时间格式,包括年、月、日、时、分、秒等。同时也可以设置时区信息。

2、使用字符串操作方法

可以使用字符串操作方法来将日期时间格式化为特定格式的字符串。例如:

const date = new Date();
const year = date.getFullYear().toString().padStart(4, '0');
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
const hour = date.getHours().toString().padStart(2, '0');
const minute = date.getMinutes().toString().padStart(2, '0');
const second = date.getSeconds().toString().padStart(2, '0');
console.log(`${year}-${month}-${day} ${hour}:${minute}:${second}`); // 2023-02-16 08:25:05

以上代码使用了字符串模板和字符串操作方法,将日期时间格式化为 YYYY-MM-DD HH:mm:ss 的格式。可以根据实际需要来修改格式。

3、自定义格式化函数

3.1、不可指定格式的格式化函数

可以编写自定义函数来格式化日期时间。例如:

function formatDateTime(date) {
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
const hour = date.getHours();
const minute = date.getMinutes();
const second = date.getSeconds();
return `${year}-${pad(month)}-${pad(day)} ${pad(hour)}:${pad(minute)}:${pad(second)}`;
} function pad(num) {
return num.toString().padStart(2, '0');
} const date = new Date();
console.log(formatDateTime(date)); // 2023-02-16 08:25:05

以上代码定义了一个 formatDateTime 函数和一个 pad 函数,用于格式化日期时间并补齐数字。可以根据需要修改格式,因此通用性较低

3.2、可指定格式的格式化函数

下面是一个通用较高的自定义日期时间格式化函数的示例:

function formatDateTime(date, format) {
const o = {
'M+': date.getMonth() + 1, // 月份
'd+': date.getDate(), // 日
'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, // 小时
'H+': date.getHours(), // 小时
'm+': date.getMinutes(), // 分
's+': date.getSeconds(), // 秒
'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
S: date.getMilliseconds(), // 毫秒
a: date.getHours() < 12 ? '上午' : '下午', // 上午/下午
A: date.getHours() < 12 ? 'AM' : 'PM', // AM/PM
};
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (let k in o) {
if (new RegExp('(' + k + ')').test(format)) {
format = format.replace(
RegExp.$1,
RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
);
}
}
return format;
}

这个函数接受两个参数,第一个参数是要格式化的日期时间,可以是 Date 对象或表示日期时间的字符串,第二个参数是要格式化的格式,例如 yyyy-MM-dd HH:mm:ss。该函数会将日期时间格式化为指定的格式,并返回格式化后的字符串。

该函数使用了正则表达式来匹配格式字符串中的占位符,然后根据对应的日期时间值来替换占位符。其中,y 会被替换为年份,M、d、h、H、m、s、q、S、a、A 分别表示月份、日期、小时(12 小时制)、小时(24 小时制)、分钟、秒、季度、毫秒、上午/下午、AM/PM。

使用该函数进行日期时间格式化的示例如下:

const date = new Date();
console.log(formatDateTime(date, 'yyyy-MM-dd HH:mm:ss')); // 2023-02-16 08:25:05
console.log(formatDateTime(date, 'yyyy年MM月dd日 HH:mm:ss')); // 2023年02月16日 08:25:05
console.log(formatDateTime(date, 'yyyy-MM-dd HH:mm:ss S')); // 2023-02-16 08:25:05 950
console.log(formatDateTime(date, 'yyyy-MM-dd hh:mm:ss A')); // 2023-02-16 08:25:05 上午

可以根据实际需要修改格式化的格式,以及支持更多的占位符和格式化选项。

4、使用第三方库

除了原生的方法外,还有很多第三方库可以用来格式化日期时间,例如 Moment.js 和 date-fns 等。这些库提供了更多的日期时间格式化选项,并且可以兼容不同的浏览器和环境

const date = new Date();
console.log(moment(date).format('YYYY-MM-DD HH:mm:ss')); // 2023-02-16 08:25:05
console.log(dateFns.format(date, 'yyyy-MM-dd HH:mm:ss')); // 2023-02-16 08:25:05

以上是几种常用的日期时间格式化方法,在进行日期时间格式化时,可以使用原生的方法、自定义函数或第三方库,选择合适的方法根据实际需要进行格式化。

二、日期和时间的其它常用处理方法

1、创建 Date 对象

要创建一个 Date 对象,可以使用 new Date(),不传入任何参数则会使用当前时间。也可以传入一个日期字符串或毫秒数,例如:

const now = new Date(); // 当前时间
const date1 = new Date("2022-01-01"); // 指定日期字符串
const date2 = new Date(1640995200000); // 指定毫秒数

2、日期和时间的获取

Date 对象可以通过许多方法获取日期和时间的各个部分,例如:

const date = new Date();
const year = date.getFullYear(); // 年份,例如 2023
const month = date.getMonth(); // 月份,0-11,0 表示一月,11 表示十二月
const day = date.getDate(); // 日期,1-31
const hour = date.getHours(); // 小时,0-23
const minute = date.getMinutes(); // 分钟,0-59
const second = date.getSeconds(); // 秒数,0-59
const millisecond = date.getMilliseconds(); // 毫秒数,0-999
const weekday = date.getDay(); // 星期几,0-6,0 表示周日,6 表示周六

3、日期和时间的计算

可以使用 Date 对象的 set 方法来设置日期和时间的各个部分,也可以使用 get 方法获取日期和时间的各个部分,然后进行计算。例如,要计算两个日期之间的天数,可以先将两个日期转换成毫秒数,然后计算它们之间的差值,最后将差值转换成天数,例如:

const date1 = new Date("2022-01-01");
const date2 = new Date("2023-02-16");
const diff = date2.getTime() - date1.getTime(); // 毫秒数
const days = diff / (1000 * 60 * 60 * 24); // 天数

4、日期和时间的比较

可以使用 Date 对象的 getTime() 方法将日期转换成毫秒数,然后比较两个日期的毫秒数大小,以确定它们的顺序。例如,要比较两个日期的先后顺序,可以将它们转换成毫秒数,然后比较它们的大小,例如:

const date1 = new Date("2022-01-01");
const date2 = new Date("2023-02-16");
if (date1.getTime() < date2.getTime()) {
console.log("date1 在 date2 之前");
} else if (date1.getTime() > date2.getTime()) {
console.log("date1 在 date2 之后");
} else {
console.log("date1 和 date2 相等");
}

5、日期和时间的操作

可以使用 Date 对象的一些方法来进行日期和时间的操作,例如,使用 setDate() 方法设置日期,使用 setHours() 方法设置小时数,使用 setTime() 方法设置毫秒数等等。例如,要将日期增加一天,可以使用 setDate() 方法,例如:

const date = new Date();
date.setDate(date.getDate() + 1); // 增加一天
console.log(date.toLocaleDateString()); // 输出增加一天后的日期

 6、其他相关的知识点

在使用 Date 对象时,需要注意以下几点:

  • 月份从 0 开始,0 表示一月,11 表示十二月;
  • getDate() 方法返回的是日期,而 getDay() 方法返回的是星期几;
  • Date 对象的年份是完整的四位数,例如 2023;
  • 使用 new Date() 创建 Date 对象时,返回的是当前时区的时间,如果需要使用 UTC 时间,可以使用 new Date(Date.UTC())。

JavaScript 中的 Date 对象提供了许多方法和属性,可以用于处理日期和时间,根据具体情况选择适合的方法和技巧。

JavaScript 日期和时间的格式化的更多相关文章

  1. JavaScript 日期和时间基础知识

    前言 学习Date对象之前,首先要先了解关于日期和时间的一些知识.比如,闰年.UTC等等.深入了解这些,有助于更好地理解javascript中的Date对象. 标准时间 一般而言的标准时间是指GMT和 ...

  2. mysql中的Date日期格式的问题:只有日期没有时间及格式化时间

    只有日期没有时间,把xml中的date改为timestamp 格式化最简单的方法:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", time ...

  3. JAVA中日期和时间的格式化选项

    一.使用printf方法 import java.util.Date; import java.util.Scanner; public class Test { public static void ...

  4. 日期和时间的格式化定义(ISO C89)

    格式化定义本质上控制的是占位. 日期 %Y:4位数的年份: %y:2位数的年份: %m:2位数的月份(1-12) %d:2位数的日(01-31) 时间 %H:24小时制(0-23) %I:12小时制( ...

  5. java和javascript日期详解

    ** java,js日期转换:** <Excerpt in index | 首页摘要> java的各种日期转换 <The rest of contents | 余下全文> 日期 ...

  6. PHP的日期和时间处理函数

    1. 将日期和时间转变为时间戳 1.1 time() 原型:time(void) 作用:返回当前时间的 UNIX时间戳. 参数:void,可选(即无参数) 1.2 mktime() 原型:int mk ...

  7. python操作日期和时间的方法

    不管何时何地,只要我们编程时遇到了跟时间有关的问题,都要想到 datetime 和 time 标准库模块,今天我们就用它内部的方法,详解python操作日期和时间的方法.1.将字符串的时间转换为时间戳 ...

  8. Java基础之一组有用的类——生成日期和时间(TryDateFormats)

    控制台程序. java.util包中含有相当多的类涉及日期和时间,包括Date类.Calendar类和GregorianCalendar类. Date类对象其实定义了精确到毫秒的时刻,从1970年1月 ...

  9. PHP中的日期和时间

    日期和时间    1.UNIX时间戳        以32位整数表示的格林威治标准时间        这个UNIX时间戳整数是从1970年1月1日0时0分0秒(计算机元年)到现在的秒数         ...

  10. Java知识回顾 (5)数组、日期与时间, StringBuffer和StringBuilder

    一.数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. dataType[] arrayRefVar; // 首选的方法 或 dataType arra ...

随机推荐

  1. 重学c#系列——委托和匿名函数[二十五]

    前言 简单介绍一下什么是委托. 正文 以前也写过委托,这次算是重新归档,和新的补充吧. https://www.cnblogs.com/aoximin/p/13940125.html 有些人说委托是函 ...

  2. 在CentOS编译Git源码

    Git 是一个免费的开源分布式版本控制系统,旨在处理从小到小到的所有内容 具有速度和效率的超大型项目. Git易于学习,占用空间很小,性能快如闪电. 它超越了Subversion,CVS,Perfor ...

  3. 树莓派编译opencv4

    前言 我用的是 树莓派3b 编译的 opencv4.1.0,如果不想编译可以直接下载我编译好的. 下载地址 直接 make install,或者按照我后续步骤复制动态链接库. 准备 需要调节虚拟内存大 ...

  4. 关于CSDN博客上传图片的接口研究

    代码实现 import requests from requests_toolbelt import MultipartEncoder import urllib.parse fields = { ' ...

  5. oracle 内置函数(三)日期函数

    日期函数概要: 系统时间 日期操作 一.系统时间 sysdate:还是西方的格式,我们一般需要to_char(date,'yyyy-mm-dd hh24:mi:ss') next_day:当前日期的下 ...

  6. [.NET学习]EFCore学习之旅 -2 简单的增删改查

    1.实例化创建数据库上下文类 首先实例化一个数据库操作上下文类,注意到DbContext实现了IDisposable接口,所以使用using语句,避免内存泄露. 2.插入 以Person类为例,先生成 ...

  7. ChatGPT能做什么?ChatGPT保姆级注册教程

    最近 OpenAI 发布的 ChatGPT 聊天机器人很火,该聊天机器人可以在模仿人类说话风格的同时回答大量的问题. 在现实世界之中,例如数字营销.线上内容创作.回答客户服务查询,甚至可以用来帮助调试 ...

  8. C++面向对象程序设计期末复习笔记[吉林大学](结合历年题速成85)

    1.头文件 头文件的作用就是被其他的.cpp包含进去的.它们本身并不参与编译,但实际上,它们的内容却在多个.cpp文件中得到了编译.根据"定义只能一次"原则我们知道,头文件中不能放 ...

  9. day05-功能实现04

    家居网购项目实现04 以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git 10.功能09-后台管理 删除家居 10.1需求分析/图解 ...

  10. 题解P1559 运动员最佳匹配问题

    简要题意 给出 \(n\) 个白色顶点,\(n\) 个黑色顶点.白色顶点 \(i\) 和黑色顶点 \(j\) 之间的边的权为 \(P_{i,j}\cdot Q_{j,i}\),求二分图最大权匹配. 思 ...