一、new Date()

创建 Date 对象

有 4 种方法创建新的日期对象:

  • new Date() 
    用当前日期和时间创建新的日期对象
  • new Date(year, month, day, hours, minutes, seconds, milliseconds)

    用指定日期和时间创建新的日期对象。

    7个数字分别指定年、月、日、小时、分钟、秒和毫秒(按此顺序)
    您不能省略年、月。如果只提供一个参数,则将其视为毫秒。

  • new Date(milliseconds)
    创建一个零时间加毫秒的新日期对象
  • new Date(date string)
    从日期字符串创建一个新的日期对象
    date String:ISO 日期、
                           短日期 "MM/DD/YYYY":02/19/2018
                           长日期"MMM DD YYYY" :Feb 19 2018  、19 Feb 2018
                           完整日期:Mon Feb 19 2018 06:55:23 GMT+0100

JavaScript 将日期存储为毫秒

JavaScript 将日期存储为自 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)以来的毫秒数。

零时间是 1970 年 1 月 1 日 00:00:00 UTC。

 JavaScript 日期输出

默认情况下,JavaScript 将使用浏览器的时区并将日期显示为全文本字符串:

Tue Apr 02 2022 09:01:19 GMT+0800 (中国标准时间)

在 HTML 中显示日期对象时,会使用 toString() 方法自动转换为字符串。

toUTCString() 方法将日期转换为 UTC 字符串(一种日期显示标准)。

toDateString() 方法将日期转换为更易读的格式。 

ISO 8601日期格式

完整的 ISO 8601  YYYY-MM-DDTHH:MM:SS[.SSS]TZD

其中:

YYYY表示四位数的年份
MM表示两位数的月份
DD表示两位数的天(day of the month),从01到31
T是用来指示时间元素的开始字符
hh表示两位数的小时,从00到23,不包括AM/PM
mm表示两位数的分钟,从00到59
ss表示两位数的秒,从00到59
mmm表示三位数的毫秒数,从000到999
TZD表示时区指示符:Z或+hh:mm或-hh:mm,+或-表示时区距离UTC(世界标准时间)时区多远。

eg:CST(中国标准时间):UTC +08:00,EST(东部标准时间):UTC -05:00,CST(中部标准时间):UTC -06:00。

UTC协调世界时 UTC - exact time now - Time.is

UTC时间格式为:YYYY-MM-DDThh:mm:ssZ

例如,2022-11-11T12:00:00Z(为北京时间2022年11月11日20点0分0秒)。

目前UTC(Universal Time Coordinated)与GMT(格林威治时间) 相差为0.9秒,故二者可以基本视为一致。

在日期-时间字符串中省略 T 或 Z,在不同浏览器中会产生不同结果。

//用大写字母 T 分隔日期和时间。
//用大写字母 Z 标识 UTC 时间。

var d1 = new Date("2022-07-20T12:00:00Z");
//Wed Jul 20 2022 20:00:00 GMT+0800 (中国标准时间)
var d2 = new Date("2022-07-20T12:00:00");
//Wed Jul 20 2022 12:00:00 GMT+0800 (中国标准时间)

//在谷歌浏览器中
var d2 = new Date("2022-07-20T12:00:00");
//Wed Jul 20 2022 12:00:00 GMT+0800 (中国标准时间)

//在2345浏览器中,即使没有Z,也会默认加上8小时
var d2 = new Date("2022-07-20T12:00:00");
//Wed Jul 20 2022 20:00:00 GMT+0800 (中国标准时间)

时区

在设置日期时,如果不规定时区,则 JavaScript 会使用浏览器的时区。

当获取日期时,如果不规定时区,则结果会被转换为浏览器时区。

换句话说,假如日期/时间以 GMT(格林威治标准时间)创建,该日期/时间将被转换为 CST(中国标准时间)。

 不同格式的时间 new Date()后,得到的值不同。

//正常时间 
var time11 = new Date('07/20/2022 00:00:00');
var time21 = new Date('07/20/2022');
var time22 = new Date('07-20-2022');
var time31 = new Date('2022/07/20');
var time32 = new Date('2022.07.20');
var time41 = new Date('2022-7-20');
//Wed Jul 20 2022 00:00:00 GMT+0800 (中国标准时间)


//【bug】日月这两个日期单个数字带0的时候
var time51 = new Date('2022-07-20');
//Wed Jul 20 2022 08:00:00 GMT+0800 (中国标准时间)

二、 获取当前日期时间

var myDate = new Date(); //Date 对象会自动把当前日期和时间保存为其初始值
myDate.getYear();  //返回当前年份(2位);请使用 getFullYear() 方法代替
myDate.getFullYear();  //返回完整的年份(4位,1970-????)
myDate.getMonth();  //返回当前月份(0-11,0表示1月)
myDate.getDate();  //返回当前日(1-31)
myDate.getDay(); //返回当前星期名(0-6,0表示星期天)
myDate.getHours(); //返回当前小时数(0-23)
myDate.getMinutes(); //返回当前分钟数(0-59)
myDate.getSeconds(); //返回当前秒数(0-59)
myDate.getMilliseconds(); //返回当前毫秒数(0-999)
myDate.getTime(); //返回1970年1月1日至今的毫秒数
myDate.toLocaleString(); //根据本地时间格式,把 Date 对象转换为字符串
myDate.toLocaleTimeString(); //根据本地时间格式,把 Date 对象的时间部分转换为字符串
myDate.toLocaleDateString(); //根据本地时间格式,把 Date 对象的日期部分转换为字符串

//您可以使用名称数组,并使用 getMonth() 将月份作为名称返回:
var months = ["January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December"];
var nowMonth = months[myDate.getMonth()]; //result:"February"

//您可以使用名称数组,并使用 getDay() 将星期名作为名称返回:
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var nowWeekDay = days[myDate.getDay()]; //result:"Saturday"

日期相关算法: 

var nowDate = new Date();
var latestYear = nowDate.getFullYear();//当前年份
var latestMonth = nowDate.getMonth() + 1;//当前月份
var latestDay = new Date().getDate();//当前号数

var nowDateFormat = latestYear + '-' + latestMonth + '-' + latestDay;// result:2021-2-20

//当前月总天数、当前月末尾号数
var latestMonthDay = new Date(latestYear, latestMonth, 0).getDate(); 
//上月总天数、上月末尾号数
var preMonthDay = new Date(latestYear, (latestMonth - 1), 0).getDate();
//今天
var today= latestYear + '-' + latestMonth + '-' + latestDay;
//今年年初
var currentYearStart = latestYear + '-01-01';
//本月初
var currentMonthStart = latestYear + '-' + latestMonth + '-01';
//本月末
var currentMonthEnd = latestYear + '-' + latestMonth + '-' + latestMonthDay;
//上月初
var preMonthStart = latestYear + '-' + (latestMonth - 1) + '-01';
//上月末
var preMonthEnd = latestYear + '-' + (latestMonth - 1) + '-' + preMonthDay;

三、检查Date对象是否为Invalid Date

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐