new Date()日期对象

new Date()日期对象

创建Date对象的语法

var now = new Date();  //获取系统当前时间

注释:Date 对象会自动把当前日期和时间保存为其初始值

js中单独调用new Date()
显示的结果是:Mar 31 10:10:43 UTC+0800 2012 这种格式的时间,称为时间对象
但是用new Date() 参与计算会自动转换为从1970.1.1开始的毫秒数

new Date()传参

主要使用以下两种方式通过传参创建指定日期Date对象
参数可以为整数 , 也可以为字符串

var d = new Date(dateString);
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);

// 当前时间
var date = new Date()
console.log('date--',date)  // date-- Fri May 15 2020 12:17:49 GMT+0800 (中国标准时间)
// 指定时间
var date1 = new Date('2020-03-23')
console.log('date1--',date1)  // Mon Mar 23 2020 08:00:00 GMT+0800 (中国标准时间)

new Date( year, month, date, hrs, min, sec)

按给定的参数创建一日期对象

参数说明:
  year的值为:如果年份<2000年,则需设定的年份减去1900。例如需设定的年份是1997则year的值应为97,即1997-1900的结果。所以Date中可设     定的年份最小为1900;如果年份>2000年,则year就是该年份表示。
  month的值域为0~11,0代表1月,11表代表12月;
  date的值域在1~31之间;
  hrs的值域在0~23之间。从午夜到次日凌晨1点间hrs=0,从中午到下午1点间hrs=12;
  min和sec的值域在0~59之间。
  例 Date day=new Date(11,3,4);
  //day中的时间为:04-Apr-11 12:00:00 AM

new Date( year, month-1, day)

new Date(年份,月份-1,日期)
表示拿到某年某月某日的零点零时零分的标准时间 , 月份要减一 , 参数为number类型

                console.log('0000---',new Date())

                var now = util.timeFormat(new Date(), 'yyyy-mm-dd')
                console.log('1111---',now)

                now = now.split('-')
                console.log('2222---',now)

                now = new Date(Number(now['0']), (Number(now['1']) - 1), Number(now['2']))
                console.log('3333---',now)

结果显示如下


image.png

new Date(year,month,0)

得到某年某月的最后一天的日期对象

new Date(2020,9,0)
// 结果 
Wed Sep 30 2020 00:00:00 GMT+0800 (中国标准时间)

// 但需要注意getMonth()得到的月份数值需要 + 1
// 如果不加1 , 则得到的结果是上个月的最后一天
var d = new Date()
var bg = new Date(d.getFullYear(), d.getMonth(), 0)
console.log('4444---',bg)

// 结果
4444--- Mon Aug 31 2020 00:00:00 GMT+0800 (中国标准时间)

一 获取特定格式的时间

now.getYear(); //获取当前年份(2位)
now.getFullYear()  // 获取完整的年份 2019
now.getMonth()   //获取当前月份(0-11,0代表1月)  需要+1
now.getDate()    //获取当前日(1-31)
now.getDay()     //获取当前星期X(0-6,0代表星期天)
now.getTime()   //获取当前时间(从1970.1.1开始的毫秒数)
now.getHours()     //获取当前小时数(0-23)
now.getMinutes()    //获取当前分钟数(0-59)
now.getSeconds()   //获取当前秒数(0-59)
now.toLocaleDateString()  //获取当前日期  "2019/1/21"
myDate.getMilliseconds(); //获取当前毫秒数(0-999)
myDate.toLocaleDateString(); //获取当前日期
var mytime=myDate.toLocaleTimeString(); //获取当前时间
myDate.toLocaleString( ); //获取日期与时间

二 JavaScript 时间戳

1.js获取时间戳的几种方式

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数
返回值都是 1970/1/1 午夜距离该日期时间的毫秒数
返回数值单位是毫秒

<1>获取1970/1/1 午夜到当前时间的时间戳:

1)var now = new Date().getTime()  //返回值都是 1552635602832
2)var now = new Date().valueOf()
3)var now = +new Date()
4) var now = Date.now()
5) var now =Date.parse(new Date())  // 不建议使用  结果:1552635602000   后三位毫秒改成了000显示 , 因为parse只能精确到秒

Date.parse(dateVal)虽然声称是返回日期与 1970 年 1 月 1 日午夜之间所间隔的毫秒数,但是实际上返回的是精确到秒的毫秒数,而并非实际的毫秒。并且这个数字是非四舍五入的,也就是即使是1秒999毫秒,也按照1000毫秒来输出。
getTime()则返回实际毫秒数。

// 具体应用
//某个时间段执行一段代码:
if(new Date('11/19/2018 15:30').getTime() < +new Date() && +new Date() < new Date('11/19/2018 18:00').getTime()){ 
// 11/19/2018 15:30  11/19/2018 18:00
        this.isActive = true;  //此处要执行的代码
        this.$apply()
}

<2>获取自定义时间戳的方法

指定时间戳

1)var old = new Date('2018/03/03').getTime()  //1520006400000
2)var old = new Date('2018/03/03').valueOf()  //1520006400000
3)var old = Date.parse('2018/03/03')   //1520006400000
// 也可以给一个完整的时间(包含时分秒)
4) var timestamp = (new Date(" 2018/06/22 08:00:20")).getTime()

<3>获得 10 位数的时间戳

在 JavaScript 中,通过时间对象转换得到的时间戳都是 13 位的,但有时候我们也需要精确到秒的 10 位时间戳,比如微信支付用的就是 10 位的时间戳。要在 JavaScript 获得 10 位的时间戳,大致思路有两个,要么截取前 10 位,要么除以 1000。示例如下:

// 将 13 位时间戳除以 1000 然后再取整,得到 10 位时间戳数字
parseInt(+new Date()/1000);

// 将 13 位时间戳转换为字符串截取前 10 位,得到 10 位时间戳字符串
(+new Date()).toString().substring(0,10); // 截取第 0~9 位
(+new Date()).toString().substr(0,10);    // 从第 0 位开始截取 10 位

2. 时间格式字符串转为时间戳(毫秒)

时间戳格式:比如1520006400000 (注意与时间对象的区别)
时间格式:比如2016-01-01 17:22:37

// 即将字符串形式的日期转换成日期对象

var strTime="2011-04-16";    //字符串日期格式           
var date= new Date(Date.parse(strTime.replace(/-/g,  "/")));      //转换成Data();

var time1=‘2016-01-01 17:22:37’;  
var date=new Date(time1.replace(/-/g, '/'));  //开始时间  
var time2=date.getTime();  

3.时间对象转换为时间戳

在 JavaScript 中,将时间对象转换为时间戳的方法有 5 种,示例如下:

// 定义一个时间对象 dt,然后依次演示各种将 dt 转换为时间戳的写法
var dt = new Date("2019-07-04 23:59:59.999");

// 写法一,精确到毫秒,得到 13 位时间戳 1562255999999
console.log(dt.getTime());

// 写法二,精确到毫秒,得到 13 位时间戳 1562255999999
console.log(dt.valueOf());

// 写法三,精确到毫秒,得到 13 位时间戳 1562255999999
console.log(Number(dt));

// 写法四,精确到毫秒,得到 13 位时间戳 1562255999999
console.log(+dt);

// 写法五,精确到秒,得到 13 位时间戳 1562255999000,后三位固定为 000
console.log(Date.parse(dt));

4.时间戳转换为时间对象

在 JavaScript 中,时间戳转时间对象的方法非常简单,直接将一个时间戳做为Date的参数即可,示例如下:

// 注意:参数中的时间戳必须是 13 位的,多一位或少一位都不行
new Date(1562169599000);

// 将时间戳转换为更加直观形象的本地时间
new Date(1562169599000).toLocaleString();
image.png

注意时间戳一定要是int型,否则转换失败。parseInt()一下最好

5.时间戳转成日期格式

// 方式一
function formatDate(date) {
    var y = date.getFullYear();
    var m = date.getMonth() + 1;
    m = m < 10 ? '0' + m : m;
    var d = date.getDate();
    d = d < 10 ? ('0' + d) : d;
    return y + '-' + m + '-' + d;//这里可以写格式
    //输出:2018-03-24
}

// 方式二
function timestampToTime(timestamp) {
    var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
    var Y = date.getFullYear() + '-';
    var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
    var D = date.getDate() + ' ';
    var h = date.getHours() + ':';
    var m = date.getMinutes() + ':';
    var s = date.getSeconds();
    return Y+M+D+h+m+s;
}
timestampToTime(1403058804);
console.log(timestampToTime(1403058804));//2014-06-18 10:33:24

// 方式三
      var formatDateTime3 = function(time, format){  
          var t = new Date(time);  
          var tf = function(i){return (i < 10 ? '0' : '') + i};  
          return format.replace(/yyyy|MM|dd|HH|mm|ss/g, function(a){  
              switch(a){  
                  case 'yyyy':  
                      return tf(t.getFullYear());  
                      break;  
                  case 'MM':  
                      return tf(t.getMonth() + 1);  
                      break;  
                  case 'mm':  
                      return tf(t.getMinutes());  
                      break;  
                  case 'dd':  
                      return tf(t.getDate());  
                      break;  
                  case 'HH':  
                      return tf(t.getHours());  
                      break;  
                  case 'ss':  
                      return tf(t.getSeconds());  
                      break;  
              }  
          })  
      }

6.日期格式转成时间戳

var date = new Date('2014-04-23 18:55:49:123');
// 有三种方式获取
// 精确到毫秒
var time1 = date.getTime();
console.log(time1);//1398250549123
// 精确到毫秒
var time2 = date.valueOf();
console.log(time2);//1398250549123
// 只能精确到秒,毫秒用000替代
var time3 = Date.parse(date);
console.log(time3);//1398250549000

三 系统时间格式设定

1、当前系统区域设置格式(toLocaleDateString和toLocaleTimeString)
     例子:(new Date()).toLocaleDateString() + " " + (new Date()).toLocaleTimeString()
     结果: 2008年1月29日 16:13:11

2.普通字符串(toDateString和toTimeString)
     例子: (new Date()).toDateString() + " " + (new Date()).toTimeString()
     结果:Tue Jan 29 2008 16:13:11 UTC+0800

3.格林威治标准时间(toGMTString)
     例子: (new Date()).toGMTString()
     结果:Tue, 29 Jan 2008 08:13:11 UTC

4.全球标准时间(toUTCString)
     例子: (new Date()).toUTCString()
     结果:Tue, 29 Jan 2008 08:13:11 UTC

5.Date对象字符串(toString)
     例子: (new Date()).toString()
     结果:Tue Jan 29 16:13:11 UTC+0800 2008

四 日常工作的时间格式相互转化

1.日期格式转为日期标准字符串:比如2015-03-19

// 方式一
var formatDate = function (date) {  
    var y = date.getFullYear();  
    var m = date.getMonth() + 1;  
    m = m < 10 ? '0' + m : m;  
    var d = date.getDate();  
    d = d < 10 ? ('0' + d) : d;  
    return y + '-' + m + '-' + d;  
}

// 方式二
arr.date = new Date();
      var d = new Date(arr.date);
      var yue = (d.getMonth() + 1) > 9 ? (d.getMonth() + 1) : '0' + (d.getMonth() + 1);
      var re = d.getDate() > 9 ? d.getDate() : '0' + d.getDate();
      var youWant = d.getFullYear() + '-' + yue + '-' + re;
      arr.date = youWant;

2. js方法返回值:比如2015-03-19 12:00:00

//方法一
var formatDateTime = function (date) {  
                var y = date.getFullYear();  
                var m = date.getMonth() + 1;  
                m = m < 10 ? ('0' + m) : m;  
                var d = date.getDate();  
                d = d < 10 ? ('0' + d) : d;  
                var h = date.getHours();  
                h=h < 10 ? ('0' + h) : h;  
                var minute = date.getMinutes();  
                minute = minute < 10 ? ('0' + minute) : minute;  
                var second=date.getSeconds();  
                second=second < 10 ? ('0' + second) : second;  
                return y + '-' + m + '-' + d+' '+h+':'+minute+':'+second;  
            }

//方法二
    /**
     * 计算时间返回 yyyy-MM-dd h:m:s 格式的方法
     * timestamp 时间戳
     */
    timestampToTime (timestamp) {
       // 计算年月日时分的函数
       var date = new Date(timestamp)
       var Y = date.getFullYear() + '-'
       var M = (date.getMonth() + 1) + '-'
       var D = date.getDate() + ' '
       var h = date.getHours() + ':'
       var m = date.getMinutes() + ':'
       var s = date.getSeconds()
       return Y + M + D + h + m + s
   }

3. 日期对象转为字符串日期格式 (yyyymmdd 或 yyyy-mm-dd)

将 Tue Aug 18 2020 00:00:00 GMT+0800 (中国标准时间) 转为 yyyymmdd格式显示

// 方法一
/**
 * 转换日期格式,结果如20200308
 * @param time  时间格式,如new Date()  比如Tue Aug 18 2020 00:00:00 GMT+0800 (中国标准时间)
 * @param type  type为1则转换成yyyymmdd格式,type为2则转换成yyyymm格式, type为3时,转换为yyyy-mm-dd
 * @returns {string}
 */
const changeDate = (time, type) => {
  let temp_time = new Number(time)
  let temp_date = new Date(temp_time)
  let temp_year1 = ""
  let temp_month1 = ""
  let temp_day1 = ""
  if (type == 1) {
    temp_year1 = temp_date.getFullYear()
    temp_month1 = (temp_date.getMonth() + 1) > 9 ? (temp_date.getMonth() + 1) : "0" + (temp_date.getMonth() + 1)
    temp_day1 = (temp_date.getDate()) > 9 ? (temp_date.getDate()) : "0" + (temp_date.getDate())
    return temp_year1.toString() + temp_month1.toString() + temp_day1.toString()
  } else if (type == 2) {
    temp_year1 = temp_date.getFullYear()
    temp_month1 = (temp_date.getMonth() + 1) > 9 ? (temp_date.getMonth() + 1) : "0" + (temp_date.getMonth() + 1)
    return temp_year1.toString() + temp_month1.toString()
  } else if (type == 3) {
    temp_year1 = temp_date.getFullYear()
    temp_month1 = (temp_date.getMonth() + 1) > 9 ? (temp_date.getMonth() + 1) : "0" + (temp_date.getMonth() + 1)
    temp_day1 = (temp_date.getDate()) > 9 ? (temp_date.getDate()) : "0" + (temp_date.getDate())
    return temp_year1.toString() + '-' + temp_month1.toString() + '-' + temp_day1.toString()
  }
}

// 使用时
changeDate(val, 3)
这个val就是new Date()得到的时间戳格式  比如Tue Aug 18 2020 00:00:00 GMT+0800 (中国标准时间)

// 方法二
const timeFormat = (value, format) => {
  let date = new Date(value)
  let y = date.getFullYear()
  let m = date.getMonth() + 1
  let d = date.getDate()
  let h = date.getHours()
  let min = date.getMinutes()
  let s = date.getSeconds()
  let result = ''
  if (format == undefined) {
    result = `${y}-${m < 10 ? '0' + m : m}-${d < 10 ? '0' + d : d} ${
      h < 10 ? '0' + h : h
    }:${min < 10 ? '0' + min : min}:${s < 10 ? '0' + s : s}`
  }
  if (format == 'yyyy-mm-dd') {
    result = `${y}-${m < 10 ? '0' + m : m}-${d < 10 ? '0' + d : d}`
  }
  if (format == 'yyyymmdd') {
    result = `${y}${m < 10 ? '0' + m : m}${d < 10 ? '0' + d : d}`
  }
  if (format == 'yyyy-mm') {
    result = `${y}-${m < 10 ? '0' + m : m}`
  }
  if (format == 'mm-dd') {
    result = ` ${mm < 10 ? '0' + mm : mm}:${ddmin < 10 ? '0' + dd : dd}`
  }
  if (format == 'hh:mm') {
    result = ` ${h < 10 ? '0' + h : h}:${min < 10 ? '0' + min : min}`
  }
  if (format == 'yyyy') {
    result = `${y}`
  }
  return result
}

// 使用时
timeFormat(new Date(), 'yyyy-mm-dd')

4.将日期字符串(yyyymmdd)转换成日期对象

var strTime="2011-04-16";    //字符串日期格式            
var date= new Date(Date.parse(strTime.replace(/-/g,  "/")));      //转换成Data(); 
// 结果-- Sat Apr 16 2011 00:00:00 GMT+0800 (中国标准时间)

5.将日期字符串(yyyy-mm-dd)转换成年月日显示

const changeDateFormat = (value) => {
  if(value){
    let reg =/(\d{4})\-(\d{2})\-(\d{2})/
    let result = value.replace(reg,"$1年$2月$3日")
    return result
  }
}

// 结果为2020年08月20日这种格式

6.将年月日日期格式转为其他格式

匹配中文字符的正则表达式: [/u4e00-/u9fa5]

举例
2021年05月08日 转为 2021-05-08

代码
var value = str.replace(/[\u4e00-\u9fa5]/g, '-');  // 将汉字替换为 -

7.将日期格式(yyyy-mm-dd)转换成转换为日期字符串(yyyy/MM/dd)或(yyyyMMdd)显示

replace(/-/g, "/") 和replace(/-/g, " ")的应用 : /g 代表全局,所有的 - 都被替换

<1>转换为yyyy/MM/dd

方式一(推荐)
var bgDate = "2017-02-16"
this.bgDate.replace(/-/g, '/')  

方式二
var str = "2017-02-16"
var reg =/(\d{4})\-(\d{2})\-(\d{2})/
var date = str.replace(reg,"$1/$2/$3")
alert(date)

<2>转换为yyyyMMdd

var bgDate = "2017-02-16"
this.bgDate.replace(/-/g, '')  

8.将日期字符串(yyyymmdd)转换成日期格式(yyyy-mm-dd)

$1表示replace函数里的占位符

var dateString = '19930701';
var pattern = /(\d{4})(\d{2})(\d{2})/;
var formatedDate = dateString.replace(pattern, '$1-$2-$3');
// 结果:1993-07-01  

 dateConversion(date) {
      let regExp = new RegExp(/(\d{4})(\d{2})(\d{2})/)
      let pattern = /(\d{4})(\d{2})(\d{2})/
      return date?date.replace(pattern, '$1-$2-$3'):''
    }

五 日期的常用方法

1.setMonth() 和getMonth()

<1>setMonth() 方法用于设置月份
dateObject.setMonth(month,day)
month   必需。一个表示月份的数值,该值介于 0(一月) ~ 11(十二月) 之间。
               -1 为去年的最后一个月
                12 为明年的第一个月
                13 为明年的第二个月

day     可选。一个表示月的某一天的数值,该值介于 1 ~ 31 之间(以本地时间计)。
                0 为上个月的最后一天
                -1 为上个月的最后一天之前的一天

                如果当月有31天:
                32 为下个月的第一天

                如果当月有30天:
                32 为下个月的第二天


setMonth() 方法用于设置月份。
注意: 一月为 0, 十二月为 11
这个方法可用于设置月份中的某一天。

举例
设置月份参数为 4 (5月份):
var d = new Date();
d.setMonth(4);

d 输出结果:
Mon May 04 2020 10:34:46 GMT+0800 (中国标准时间)


bug
只要setMonth()的参数为小于31天的月份时就会变为下一个月。
原因是:因为当前月份是31天,而设置的月份小于31天,就会把日期顺延。
解决方法:
      1、设置月份时,将日期设为1,记setMonth(month, 1)

<2>getMonth() 方法可返回表示月份的数字
dateObject.getMonth()
返回值
dateObject 的月份字段,使用本地时间。返回值是 0(一月) 到 11(十二月) 之间的一个整数。

2.getDate()和setDate()

<1>getDate()方法可返回月份的某一天
//语法
dateObject.getDate()
dateObject 所指的月份中的某一天,使用本地时间。

返回值是一个月中的某一天, 值为 1 - 31 之间的一个整数。

//举例
var d = new Date()
document.write(d.getDate())  // 比如今天是20200630,返回值为30

var birthday = new Date("July 21, 1983 01:15:00")
document.write(birthday.getDate())    // 输出21

返回什么日期 取决于d这个变量是什么日期,假如d是20200627 ,则返回值为27
<2>setDate() 方法用于设置一个月的某一天
//语法
Date.setDate(day)

day 必需。表示一个月中的一天的一个数值(1 ~ 31):
0 为上一个月的最后一天
-1 为上一个月最后一天之前的一天

如果当月有 31 天:  32 为下个月的第一天
如果当月有 30 天:  32 为下一个月的第二天

//举例
var d = new Date();
d.setDate(15);
//d 输出结果: Mon Jun 15 2020 21:49:03 GMT+0800 (中国标准时间)

3.getTime()和setTime()

<1>getTime()
var now = new Date(); 
now.getTime()   //获取当前时间(从1970.1.1开始的毫秒数)   =>时间戳
<2>setTime()
Date.setTime(millisec)
// millisec 必需。表示要设置的日期和时间据 GMT 时间 1970 年 1 月 1 日午夜之间的毫秒数。
// 返回值也是毫秒数

4.new Date(year,month,0)和new Date(year,month-1,day)

<1>new Date(year,month,0)

表示得到某年某月的最后一天的日期对象

const d = new Date(end.getFullYear(),end.getMonth()+1,0)

示例


image.png

通常用new Date(year,month,0).getDate()计算某月的天数

//获取某年某月有多少天
function getMonthLength(year, month) {
    return new Date(year, month, 0).getDate();
}

getMonthLength(2017, 2); //28

参考文章 https://segmentfault.com/q/1010000011402629?sort=created

<2>new Date(year,month-1,day)

new Date(年份,月份-1,日期)
表示拿到某年某月某日的零点零时零分的标准时间 , 月份要减一 , 参数为number类型

new Date(2020,6,1)  表示拿到七月一号零点零时零分的标准时间
Wed Jul 01 2020 00:00:00 GMT+0800 (中国标准时间)  

new Date (2020,5,22) 表示拿到六月22号零点零时零分的标准时间
Mon Jun 22 2020 00:00:00 GMT+0800 (中国标准时间) 
image.png

六 设置/获取时间段

1.JS获取最近一周的时间

const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
const date = [start, end]
date输出:
0: Wed Jul 10 2019 12:21:48 GMT+0800 (中国标准时间) {}
1: Wed Jul 17 2019 12:21:48 GMT+0800 (中国标准时间) {}

2.JS获取六个月前到至今的时间段

let end = new Date()
let start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 180) // 往前推6个月
this.startDate = utils.changeDate(start, 1)  // 拿到6个月前的日期
this.endDate = utils.changeDate(end, 1)   // 当前日期

// changeDate是个公共方法,将日期转换为yyyy-mm-dd

3.JS获取当日/三日/近一个月的日期

image.png
快速查询
{{item.name}}
data(){ return{ Lists: [ {name: '当日'}, {name: '三日'}, {name: '近一月'} ], name: '', } }
// 快速查询选择
            Choose(item, index) {
                var now = util.timeFormat(new Date(), 'yyyy-mm-dd')
                now = now.split('-')
                now = new Date(Number(now['0']), (Number(now['1']) - 1), Number(now['2']))  // 获取当前日期的零点零时的标准时间
                var d = new Date()
                var bg = new Date(d.getFullYear(), d.getMonth(), 0) // 获取上个月最后一天的day
                bg = bg.getDate()
                if(index === 0) {
                    this.bgDate = util.timeFormat(new Date(), 'yyyy-mm-dd')
                    this.endDate = util.timeFormat(new Date(), 'yyyy-mm-dd')
                } else if(index === 1) {
                    now = util.timeFormat(now.setDate(now.getDate() - 2), 'yyyy-mm-dd')

                    this.bgDate = now;
                    this.endDate = util.timeFormat(new Date(), 'yyyy-mm-dd')
                } else if(index === 2) {
                    now = util.timeFormat(now.setDate(now.getDate() - bg), 'yyyy-mm-dd')
                    this.bgDate = now;
                    this.endDate = util.timeFormat(new Date(), 'yyyy-mm-dd')
                }
                this.name = item.name
            },

你可能感兴趣的:(new Date()日期对象)