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)
结果显示如下
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();
注意时间戳一定要是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)
示例
通常用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 (中国标准时间)
六 设置/获取时间段
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获取当日/三日/近一个月的日期
<div>
<div class="left-box">快速查询</div>
<div class="right-box quick_query">
<div v-for="(item,index) in Lists" :key="index" :class="{choose_item:name == item.name}" @click="Choose(item,index)">
{{item.name}}
<img src="@/assets/image/company/xuanze.png" class="check_icon" v-show="item.name == name" />
</div>
</div>
</div>
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
},