Skip to content

Date 类型(日期类型)

创造方式,只有一种

1. 构造函数

js
//   构造方法
var date = new Date()
console.log(date) //Date 2018-08-02T08:48:25.164Z

生成一个日期类型,其参数不同 生成的日期也不同

1.1 没有参数

js
var date = new Date()
console.log(date) //Date 2018-08-02T08:48:25.164Z

1.2 一个参数,且为字符串类型

js
// 通过标准的时间格式
var date1 = new Date("2018-08-03 15:56:28")
//   入参为dateString格式 ,此为可转换为Date的字符串 时间可省略。
//     主要格式一般两种:
//     1、 yyyy-MM-dd HH:mm:ss
//     2、 yyyy/MM/dd HH:mm:ss   推荐的方式
console.log("---------------  new Date ---------")
console.log(new Date("2018-08-03 15:56:28"))
// Fri Aug 03 2018 15:56:28 GMT+0800 (中国标准时间)
// IE :  Invalid Date
console.log(new Date("2018-08-03"))
// Fri Aug 03 2018 08:00:00 GMT+0800 (中国标准时间)
console.log(new Date("2018/08/03 15:56:28"))
// Fri Aug 03 2018 15:56:28 GMT+0800 (中国标准时间)
console.log(new Date("2018/08/03"))
// Fri Aug 03 2018 00:00:00 GMT+0800 (中国标准时间)

// 注意:
//     1、省略时间的时候 -的方法 会自动加上本地时区。 如果不省略时区 则在IE下转换失败

1.3 一个参数,是数字类型

js
var date = new Date(1533282988249) //Date 2018-08-02T08:48:25.164Z

1.4 多个参数,全是数字类型

js
var date = new Date(year, month, day, hour, minute, second, millisecond)
  • year : 年份 4 位数。 2018
  • month : 代表月份的整数值从 0(1 月)到 11(12 月)。 重要: 月份是从 0 开始
  • day : 代表一个月中的第几天的整数值,从 1 开始。 (1-31)
  • hour : 代表一天中的小时数的整数值 (24 小时制)。 (0-23)
  • minute : 分钟数。 从 0 开始。 (0-59)
  • second : 秒数。 从 0 开始。 (0-59)
  • millisecond : 毫秒部分的整数值
js
// 通过多个参数
var date2 = new Date(2018, 7, 3, 15, 56, 28)
var date2 = new Date(2018, 7, 3) //Fri Aug 03 2018 00:00:00 GMT+0800 (中国标准时间

// Fri Aug 03 2018 15:56:28 GMT+0800 (中国标准时间)    Fri Aug 03 2018 15:56:28 GMT+0800 (中国标准时间)    Fri Aug 03 2018 15:56:28 GMT+0800 (中国标准时间)
console.log(date + "    " + date1 + "    " + date2)
console.log(new Date(2018)) //Thu Jan 01 1970 08:00:02 GMT+0800 (中国标准时间)
// 注意 :
//     1、 毫秒数是自1970年1月1日00:00:00 (世界标准时间) 起经过的毫秒数。
//     2、 传入的为日期字符串的时候  月份不需要-1  而通过多个参数创建的时候 月份需要减 -

2. 静态方法

  • Date.now()
  • Date.parse()
  • Date.UTC()

2.1 Date.now()

获取当前时间的毫秒数

js
console.log(Date.now()) //1533199691803  返回自1970年1月1日00:00:00到当前时间的毫秒数

2.2 Date.parse()

获取指定字符串时间格式的毫秒数

js
console.log(Date.parse("2018-07-02 10:10:10")) // 1530497410000

2.3 Date.UTC()

获取多参数时间的毫秒数

js
console.log(Date.UTC(2018, 7, 3)) //  1533254400000   //Fri Aug 03 2018 08:00:00 GMT+0800 (中国标准时间)
1、 可见 new Date() 三种入参方式其实就是调用三种静态方法,但是有区别
1、 new Date() ,new Date(dataString ) 与 Date.now(),Date.parse() 前一个返回的是国际时间标准格式 后一个返回的是毫秒数。
2、 new Date(2018,7,2)与 Date.UTC(2018,7,2) 的区别
  • 返回值格式不同
    • new Date(2018,7,2) 返回一个时间格式
    • Date.UTC(2018,7,2) 一个毫秒数。
  • 时区问题
    • new Date(2018,7,2) 没有时间的时候一本地时区为标准,
    • Date.UTC(2018,7,2) 以国际时间+时区 导致时间为 08:00:00

实例方法

1、 get 方法

  • date.getTime() 返回一个时间的格林威治时间数值。 即毫秒数
  • date.getDay() 根据本地时间,返回一个具体日期中一周的第几天,0 表示星期天。
  • date.getFullYear() 根据本地时间返回指定日期的年份。
  • date.getMonth() 返回一个指定的日期对象的月份,
  • date.getDate() 根据本地时间,返回一个指定的日期对象为一个月中的第几天。 即时期
  • date.getHours() 根据本地时间,返回一个指定的日期对象的小时。
  • date.getMinutes() 根据本地时间,返回一个指定的日期对象的份数。
  • date.getSeconds() 根据本地时间,返回一个指定的日期对象的秒数。
js
var now = new Date("2018/08/03 16:28:06") // 2018/08/03
// get方法
// getTime()  返回一个时间的格林威治时间数值。  即毫秒数
console.log(now.getTime()) // 1533284886000
// getDay()  根据本地时间,返回一个具体日期中一周的第几天,0 表示星期天。
console.log(now.getDay()) // 5  星期五
// getFullYear()  根据本地时间返回指定日期的年份。
console.log(now.getFullYear()) // 2018
// getMonth()  返回一个指定的日期对象的月份,为基于0的值(0表示一年中的第一月)。
console.log(now.getMonth()) // 7  8月份
// getDate()  根据本地时间,返回一个指定的日期对象为一个月中的第几天。  即时期
console.log(now.getDate()) // 3
// getHours()  根据本地时间,返回一个指定的日期对象的小时。
console.log(now.getHours()) // 16
// getMinutes()  根据本地时间,返回一个指定的日期对象的份数。
console.log(now.getMinutes()) // 28
// getSeconds()  根据本地时间,返回一个指定的日期对象的秒数。
console.log(now.getSeconds()) // 6

2.2、 set 方法

  • date.setFullYear() 设置 Date 对象的年份值;4 位年份。返回的毫秒数
  • date.setMonth(month,date) 设置 Date 对象的月份值。0 表示 1 月,11 表示 12 月。
  • date.setDate(date) 设置 Date 对象的月份中的日期值;值的范围 1~31 。
  • date.setHours(hour, min, sec, msec) 设置 Date 对象的小时值。
  • date.settMinutes( min, sec, msec) 设置 Date 对象的分钟值。
  • date.setSeconds(sec, msec) 设置 Date 对象的毫秒值。
js
// setFullYear(year, month, date) :设置Date对象的年份值;4位年份。返回的毫秒数
console.log(now.setFullYear(2017)) // 1501748886000
console.log(new Date(now.setFullYear(2017, 6, 3))) // Mon Jul 03 2017 16:28:06 GMT+0800 (中国标准时间)
// setMonth(month,date) :设置Date对象的月份值。0表示1月,11表示12月。
console.log(now.setMonth(6)) // 1499070486000
console.log(new Date(now.setMonth(6, 3))) //Mon Jul 03 2017 16:28:06 GMT+0800 (中国标准时间)
// setDate(date) :设置Date对象的月份中的日期值;值的范围1~31 。
console.log(now.setDate(3)) //1499070486000
// setHours(hour, min, sec, msec) :设置Date对象的小时值。
console.log(now.setHours(23)) //1499095686000
console.log(now.setHours(23, 59, 59, 1000)) //1499097600000
// setMinutes(min, sec, msec) :设置Date对象的分钟值。
console.log(now.setMinutes(59)) //1499101140000
console.log(now.setMinutes(59, 59, 1000)) //1499101200000
// setSeconds(sec, msec) :设置Date对象的秒数值。
console.log(now.setSeconds(59)) //1499101259000
console.log(now.setSeconds(59, 1000)) //1499101260000
// setMilliseconds(msec) :设置Date对象的毫秒值。
console.log(now.setMilliseconds(1000)) //1499101261000

2.3、 转换方法

  • date.toString()
  • date.toLocaleString()
  • date.toDateString()
  • date.toLocaleDateString()
  • date.toTimeString()
  • date.toLocaleTimeString()
  • date.valueOf()

转换方法都存在各自的问题,所以日期的转换,最好使用插件或者自定义方法,推荐 moment.js Date.js

js
// date.toString()
//   返回一个美式时间的字符串
var date = new Date("2018/08/03 16:28:06")
console.log(date.toString()) // Fri Aug 03 2018 16:28:06 GMT+0800 (中国标准时间)
// 返回当前地区的时间字符串
console.log(date.toLocaleString()) //2018/8/3 下午4:28:06
console.log(date.toLocaleString("zh-CN")) //2018/8/3 下午4:28:06
// 返回美式时间的日期字符串
console.log(date.toDateString()) //Fri Aug 03 2018
// 返回当前地区的日期字符串
console.log(date.toLocaleDateString()) //2018/8/3
// 返回美式时间的时间字符串
console.log(date.toTimeString()) //16:28:06 GMT+0800 (中国标准时间)
// 返回当前地区的时间字符串
console.log(date.toLocaleTimeString()) //下午4:28:06
// 返回当前地区的毫秒数
console.log(date.valueOf()) //1533284886000