日期总结(js new Date())

437 阅读2分钟

日期是常用的属性。总结一下, 以后会慢慢补充

1. 基础属性

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

2. 常用的方法和属性

// 获取当天的零点开始的日期
new Date(new Date().toLocaleDateString())  // Sun Nov 24 2019 00:00:00 GMT+0800 (中国标准时间)

// 日期初始化的5种方法
1)new Date("month dd,yyyy hh:mm:ss");  // new Date("January 12,2006 22:19:35");
2)new Date("month dd,yyyy");  // new Date("January 12,2006");
3)new Date(yyyy,mth,dd,hh,mm,ss);  // new Date(2006,0,12,22,19,35);
4)new Date(yyyy,mth,dd);  // new Date(2006,0,12);
5)new Date(ms);  // new Date(1137075575000);
// js获取当前时间戳的5种方式(都是13位)
Date.parse(new Date()) // 只有这个是精确到秒,因为后三位是0
+new Date() // 这种方式比较简便,推荐使用
Date.now()
new Date().getTime()
new Date().valueOf()
// 一些比较常用的日期方法
new Date().toLocaleDateString() // "2019/11/24"
new Date().toLocaleString()  // "2019/11/24 下午8:07:09"

3. 不常用的一些方法属性

new Date().toISOString()   // "2019-11-24T11:57:55.888Z"  转换成java8格式的日期对象
// 将java8日期对象转化成js日期格式
new Date("2019-11-24T11:57:55.888Z") // Sun Nov 24 2019 19:57:55 GMT+0800 (中国标准时间)
+new Date("2019-11-24T11:57:55.888Z")  //1574596675888

4. 返回num天后的年月日字符串

// 得到前天,今天,后天的日期:eg:今天20190325 , 那么得到前天 20190323 , 后天 20190327
function GetDateStr(num) {
  let getChangeDate = new Date();
  getChangeDate.setDate(getChangeDate.getDate() + num); // 获取num天后的日期
  let year = getChangeDate.getFullYear();
  console.log(year);
  let month =
    getChangeDate.getMonth() + 1 < 10
      ? "0" + (getChangeDate.getMonth() + 1)
      : getChangeDate.getMonth() + 1;
  let date =
    getChangeDate.getDate() < 10
      ? "0" + getChangeDate.getDate()
      : getChangeDate.getDate();
  console.log("" + year + month + date);
  return "" + year + month + date;
}

5. 得到今天, 昨天, 本周, 上周, 本月, 上月, 本季度,本年等的开始结束日期

/**
* console.log('今天', getRangeDate('今天')) // 今天 2021-04-25 2021-04-25
* console.log('昨天', getRangeDate('昨天')) // 昨天 2021-04-24 2021-04-25
* console.log('本周', getRangeDate('本周')) // 本周 2021-04-19 2021-04-25
* console.log('本月', getRangeDate('本月')) // 本月 2021-04-01 2021-04-25
* console.log('本季', getRangeDate('本季')) // 本季 2021-04-01 2021-04-25
* console.log('本年', getRangeDate('本年')) // 本年 2021-01-01 2021-04-25
*/

function getRangeDate(str, connectChar = ' ') {
    let oneDay = 60 * 1000 * 60 * 24;
    let now = new Date();
    let nowDay = now.getDay();
    let nowDate = now.getDate();
    let nowMonth = now.getMonth() + 1;
    let nowYear = now.getFullYear();
    let res = '';
    let todayDate = `${_addZero(nowYear)}-${_addZero(nowMonth)}-${_addZero(nowDate)}`;
    switch (str) {
            case '今天':
                    res = formatTime(now) + connectChar + formatTime(now);
                    break;
            case '昨天':
                    res = formatTime(+now - oneDay) + connectChar + formatTime(now);
                    break;
            case '本周':
                    res = formatTime(+now - oneDay * (nowDay === 0 ? nowDay + 6 : nowDay - 1)) + connectChar + formatTime(now);
                    break;
            case '上周':
                    res = formatTime(+now - oneDay * ((nowDay === 0 ? nowDay + 6 : nowDay - 1) + 6)) + connectChar + formatTime(+now -
                            oneDay *
                            ((nowDay === 0 ? nowDay + 6 : nowDay - 1)));
                    break;
            case '本月':
                    res = _addZero(nowYear) + '-' + _addZero(nowMonth) + '-' + _addZero(1) + connectChar + todayDate;
                    break;
            case '上月':
                    if (nowMonth !== 1) {
                            res = _addZero(nowYear) + '-' + _addZero(nowMonth - 1) + '-' + _addZero(1) + connectChar + formatTime(new Date(
                                            _addZero(
                                                    nowYear) + '-' + _addZero(nowMonth) + '-' + _addZero(1) + ' 00:00:00')
                                    .getTime() - oneDay);
                    } else {
                            res = _addZero(nowYear) + '-' + _addZero(12) + '-' + _addZero(1) + connectChar + formatTime(new Date(_addZero(
                                            nowYear) +
                                    '-' + _addZero(12) + '-' + _addZero(nowDate)) - oneDay);
                    }
                    break;
            case '本季':
                    // 1,2,3 一季度。 4,5,6 二季度。 7,8,9 三季度。 10,11,12 四季度
                    let startQuarter = '';
                    if (nowMonth === 1 || nowMonth === 2 || nowMonth === 3) {
                            startQuarter = _addZero(nowYear) + '-01-01';
                    } else if (nowMonth === 4 || nowMonth === 5 || nowMonth === 6) {
                            startQuarter = _addZero(nowYear) + '-04-01';
                    } else if (nowMonth === 7 || nowMonth === 8 || nowMonth === 9) {
                            startQuarter = _addZero(nowYear) + '-07-01';
                    } else if (nowMonth === 10 || nowMonth === 11 || nowMonth === 12) {
                            startQuarter = _addZero(nowYear) + '-10-01';
                    }
                    res = startQuarter + connectChar + todayDate;
                    break;
            case '上季度':
                    // 1,2,3 一季度。 4,5,6 二季度。 7,8,9 三季度。 10,11,12 四季度
                    let startQuarter2 = '';
                    let endQuarter = '';
                    if (nowMonth === 1 || nowMonth === 2 || nowMonth === 3) {
                            startQuarter2 = _addZero(nowYear - 1) + '-10-01';
                            endQuarter = _addZero(nowYear) + '-01-01';
                    } else if (nowMonth === 4 || nowMonth === 5 || nowMonth === 6) {
                            startQuarter2 = _addZero(nowYear) + '-01-01';
                            endQuarter = _addZero(nowYear) + '-04-01';
                    } else if (nowMonth === 7 || nowMonth === 8 || nowMonth === 9) {
                            startQuarter2 = _addZero(nowYear) + '-04-01';
                            endQuarter = _addZero(nowYear) + '-07-01';
                    } else if (nowMonth === 10 || nowMonth === 11 || nowMonth === 12) {
                            startQuarter2 = _addZero(nowYear) + '-07-01';
                            endQuarter = _addZero(nowYear) + '-10-01';
                    }
                    res = startQuarter2 + connectChar + endQuarter;
                    break;
            case '本年':
                    res = _addZero(nowYear) + '-01-01' + connectChar + todayDate;
                    break;
            case '上年':
                    res = _addZero(nowYear - 1) + '-01-01' + connectChar + formatTime(new Date(_addZero(nowYear) + '-01-01')
                            .getTime() - oneDay);
                    break;
            default:
                    break;
    };
    return res;
}

function _addZero(str) {
    str = str.toString();
    let res = str.length < 2 ? '0' + str : str;

    return res;
};

function formatTime(time, cFormat = '{y}-{m}-{d}') {
    let date;
    if (typeof time === 'object') {
            date = time;
    } else {
            if (('' + time)
                    .length === 10) time = parseInt(time) * 1000;
            date = new Date(time);
    }
    const formatObj = {
            y: date.getFullYear(),
            m: date.getMonth() + 1,
            d: date.getDate(),
            h: date.getHours(),
            i: date.getMinutes(),
            s: date.getSeconds(),
            a: date.getDay()
    };
    let timeStr = cFormat.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
            let value = formatObj[key]; // Note: getDay() returns 0 on Sunday
            if (key === 'a') {
                    return ['日', '一', '二', '三', '四', '五', '六'][value];
            }
            if (result.length > 0 && value < 10) {
                    value = '0' + value;
            }
            return value || 0;
    });
    return timeStr;
};