前言
之前写博客都是在github的搭建的个人博客上,最近开始迁移博客上的内容到segmentfalut。一方面是想重新整理下写过的博客。另一方面也是想与大家多多交流,找到现阶段自己的不足。第一篇文章是关于Date对象,这篇博客是关于Date对象的一些定义和一些常用方法的使用。
Date对象
1. 作为Date对象
1-1 用法
- 作为普通对象可以直接作为函数调用,返回当前标准时间格式的字符串。
-
传参和不传参返回结果一致。
Date(); //打印结果 "Wed Dec 05 2018 19:43:52 GMT+0800 (中国标准时间)"
1-2 Date对象方法
-
Date.now()
返回当前时间的时间戳,不接受传参。
Date.now(); //打印结果 1544063816980
-
Date.parse()
传入解析日期字符串返回时间戳,如果解析失败,返回NaN。(传入的格式要求详见 parse日期格式)
Date.parse("2018-09-09 01:02:03"); //打印结果 1536426123000
2. 作为Date()构造函数
1.作为构造函数可以通过new指针实例化一个Date的实例对象,这个对象是一个日期对象。
2.注意:new Date()接受传参,传参格式与上文提到的parse()方法传参格式一致,但返回的数据时标准时间格式对象。
let date = new Date();
// Thu Dec 06 2018 09:29:58 GMT+0800 (中国标准时间)
2-1 实例方法
从上图可以看出所有的Date实例都继承自Date.prototype。所有实例的属性和方法即是继承于Date构造函数原型上的属性和方法。这些方法大致分为Getter,Setter,Conversion getter几类。我主要是对Getter类的几种方法进行分析。更多Date的原型方法可见 Date对象实例方法
方法 | 描述 |
---|---|
getDate() | 返回一个月中的某一天(1 ~ 31) |
getDay() | 返回一周中的某一天(0 ~ 6),星期日为0,星期一为1 |
getMonth() | 返回月份(0 ~ 11) |
getFullYear() | 以四位数字返回年份 |
getHours() | 返回小时(0 ~ 23) |
getMinutes() | 返回分钟(0 ~ 59) |
getSeconds() | 返回秒数(0 ~ 59) |
getTime() | 返回时间戳 |
通过上面表格的方法,我们可以对页面上的日期进行转换来与后台进行交互。
2-2 日期转换方法
指定时间戳转化成日期或者时间,可指定分割符和转换类型。
function unixStandardDate(dates = Date.now(), separatorStr = "-", unixType = "date") {
//把时间戳转化成Date对象
let date = new Date(dates);
//获取年月日
let year = date.getFullYear();
let month = date.getMonth() + 1;
month = month < 10 ? ('0' + month) : month;
let day = date.getDate();
day = day < 10 ? ('0' + day) : day;
//返回的年月日
let resultDate = year + separatorStr + month + separatorStr + day;
//获取时间
let hours = date.getHours();
hours = hours < 10 ? ('0' + hours) : hours;
let minutes = date.getMinutes();
minutes = minutes < 10 ? ('0' + minutes) : minutes;
let seconds = date.getSeconds();
seconds = seconds < 10 ? ('0' + seconds) : seconds;
let resultTime = hours + ":" + minutes + ":" + seconds
//判断是转换日期还是转换时间
if (unixType === "date") {
return resultDate;
} else if (unixType === "time") {
return resultDate + " " + resultTime;
}
}
console.log(unixStandardDate(undefined, "/", "time"));
//后台返回的时间戳处理
console.log(unixStandardDate(1543622400000));
//打印结果
"2018/12/06 09:58:12"
"2018-12-01"
指定日期或者时间,转化成时间戳。
指定连接符替换只是为了方便不同格式的处理。
function unixTimeStamp(date, separatorStr) {
let newDate = date.replace(eval('/'+ separatorStr +'/g'), '/');
let resultDate = new Date(newDate);
let timeStamp = resultDate.getTime();
return timeStamp;
}
console.log(unixTimeStamp('2019-09-07 00:00:00', '-'));
// 打印结果
1567785600000
返回当前月份的上一个月
function getPreMonth(date, separatorStr = "-") {
let year = date.split(separatorStr)[0];
let month = date.split(separatorStr)[1];
//设置变量获取前一个月
let resultYear = year;
let resultMonth = parseInt(month) - 1;
//判断是否为1月份,返回上一年
if (resultMonth === 0) {
resultYear = parseInt(resultYear) - 1;
resultMonth = 12;
}
//判断新的月份是否小于10
if (resultMonth < 10) {
resultMonth = '0' + resultMonth;//月份填补成2位。
}
return resultYear + separatorStr + resultMonth;
}
console.log(getPreMonth("2016-09", "-"));
//打印结果
"2016-08"
小结
写本篇文章的主要目的只是为了更好的处理时间戳和日期格式在前后端交互工程中遇到的问题,关于更多的Date详情,请移步 JavaScript Date 对象