js获取自然周/自然月/自然日开始结束时间戳


/**
 * 获取自然月开始结束时间
 * @param {*} year
 * @param {*} month
 */
function getMonthBeginEnd(year, month) {
    if (~~year === 0 || ~~month === 0) {
        throw new Error('年月参数错误');
    }

    const result = {begin: 0, end: 0};
    const target = new Date();
    target.setFullYear(year);
    target.setMonth(month - 1);
    target.setDate(1);
    target.setHours(0);
    target.setMinutes(0);
    target.setSeconds(0);
    target.setMilliseconds(0);
    result.begin = target.getTime();

    const now = new Date();
    if (target.getFullYear() + target.getMonth() >= now.getFullYear() + now.getMonth()) {
        result.end = now.getTime();
        console.log(result);
        console.log(new Date(result.begin), new Date(result.end));
        return result;
    }

    target.setMonth(month);//当月的下个月1日 0时0分0秒
    target.setSeconds(-1);//前1秒,即昨天最后1秒钟,也就是上个月的最后一秒钟
    result.end = target.getTime();

    console.log(result);
    console.log(new Date(result.begin), new Date(result.end));
    return result;
}
/**
 * 获取自然日开始结束时间
 * @param {*} year
 * @param {*} month
 * @param {*} date
 */
function getDateBeginEnd(year, month, date) {
    if (~~year === 0 || ~~month === 0 || ~~date === 0) {
        throw new Error('年月日参数错误');
    }

    const result = {begin: 0, end: 0};
    const target = new Date();
    target.setFullYear(year);
    target.setMonth(month - 1);
    target.setDate(date);
    target.setHours(0);
    target.setMinutes(0);
    target.setSeconds(0);
    target.setMilliseconds(0);
    result.begin = target.getTime();
    const targetDateCount = target.getFullYear() + target.getMonth() + target.getDate();

    const now = new Date();
    const nowDateCount = now.getFullYear() + now.getMonth() + now.getDate();
    if (targetDateCount >= nowDateCount) {
        result.end = now.getTime();
        console.log(0, result);
        console.log(new Date(result.begin), new Date(result.end));
        return result;
    }

    target.setDate(target.getDate() + 1);//次日0时0分0秒
    target.setSeconds(-1);//前1秒,即当日最后1秒钟
    result.end = target.getTime();

    console.log(1, result);
    console.log(new Date(result.begin), new Date(result.end));
    return result;
}

/**
 * 获取自然周开始结束时间
 * @param {*} year
 * @param {*} month
 * @param {*} number 第几周
 */
function getWeekByMonth(year, month, number) {
    const weekCount = getWeekCountInMonth(year, month);
    const result = {begin: 0, end: 0, list: weekCount};
    const target = new Date();
    target.setFullYear(year);
    target.setMonth(month - 1);
    target.setDate(1);
    target.setHours(0);
    target.setMinutes(0);
    target.setSeconds(0);
    target.setMilliseconds(0);
    let targetDay = target.getDay();
    targetDay = targetDay === 0 ? 7 : targetDay;

    if (number === weekCount[0]) {
        console.log(month + '月第' + number + '周起始', target);
        result.begin = target.getTime();
        target.setDate(target.getDate() + (7 - targetDay));//设置到周日最后一秒
        target.setHours(23);
        target.setMinutes(59);
        target.setSeconds(59);
        target.setMilliseconds(0);
        console.log(month + '月第' + number + '周截止', target);
        result.end = target.getTime();
        console.log(result);
        return result;
    }

    target.setDate(target.getDate() + (7 - targetDay) + 1);//对其到周一,设置到第二个周一0时0分0秒
    target.setDate(target.getDate() + 7 * (number - 2));//设置到第n周周日
    console.log(month + '月第' + number + '周起始', target);
    result.begin = target.getTime();

    if (number === weekCount[weekCount.length - 1]) {
        target.setMonth(month);//次月1日
        target.setDate(1);
        target.setHours(0);
        target.setMinutes(0);
        target.setSeconds(0);
        target.setMilliseconds(-1);//向前到当月最后1毫秒
        result.end = target.getTime();
        console.log(month + '月第' + number + '周截止', target);
        console.log(result);
        return result;
    }

    target.setDate(target.getDate() + 6);//设置到第n周周日
    target.setHours(23);
    target.setMinutes(59);
    target.setSeconds(59);
    target.setMilliseconds(0);
    result.end = target.getTime();
    console.log(month + '月第' + number + '周截止', target);
    console.log(result);
    return result;
}

/**
 * 获取每月有多少周
 * @param {*} year
 * @param {*} month
 */
function getWeekCountInMonth(year, month) {
    const list = [];
    const target = new Date();
    let offset = 1;
    target.setFullYear(year);
    target.setMonth(month - 1);
    target.setDate(1);
    target.setHours(0);
    target.setMinutes(0);
    target.setSeconds(0);
    target.setMilliseconds(0);
    let targetDay = target.getDay();
    targetDay = targetDay === 0 ? 7 : targetDay;

    if (targetDay !== 1) {
        console.log(targetDay);
        list.push(offset);
        offset = offset + 1;
        target.setDate(target.getDate() + (7 - targetDay) + 1);//对齐到周一
    }

    for (let i = offset; i <= 5; i++) {
        list.push(offset);
        offset = offset + 1;
        target.setDate(target.getDate() + 7);//设置到次周一0时分秒
        target.setMilliseconds(-1);//向前1毫秒到本周最后1毫秒
        console.log(target);
        if ((target.getMonth() + 1) !== month) {
            break;
        }
    }
    console.log(month + '月周数', list);
    return list;
}

/**
 * 获取上一月时间
 * @param {} date
 */
function getPreMonth (date) {
    var _date = dateFormat('YYYY-MM', new Date(date));
    var arr = _date.split('-');
    var year = arr[0]; // 获取当前日期的年份
    var month = arr[1]; // 获取当前日期的月份
    var day = arr[2]; // 获取当前日期的日
    var days = new Date(year, month, 0);
    days = days.getDate(); // 获取当前日期中月的天数
    var year2 = year;
    var month2 = parseInt(month) - 1;
    if (month2 === 0) {
        year2 = parseInt(year2) - 1;
        month2 = 12;
    }
    var day2 = day;
    var days2 = new Date(year2, month2, 0);
    days2 = days2.getDate();
    if (day2 > days2) {
        day2 = days2;
    }
    if (month2 < 10) {
        month2 = '0' + month2;
    }
    var t2 = year2 + '-' + month2;
    return t2;
}
/**
 * 获取下一月时间
 * @param {时间} date
 */
function getNextMonth (date) {
    var _date = dateFormat('YYYY-MM', new Date(date));
    var arr = _date.split('-');
    var year = arr[0]; // 获取当前日期的年份
    var month = arr[1]; // 获取当前日期的月份
    var day = arr[2]; // 获取当前日期的日
    var days = new Date(year, month, 0);
    days = days.getDate(); // 获取当前日期中的月的天数
    var year2 = year;
    var month2 = parseInt(month) + 1;
    if (month2 === 13) {
        year2 = parseInt(year2) + 1;
        month2 = 1;
    }
    var day2 = day;
    var days2 = new Date(year2, month2, 0);
    days2 = days2.getDate();
    if (day2 > days2) {
        day2 = days2;
    }
    if (month2 < 10) {
        month2 = '0' + month2;
    }

    var t2 = year2 + '-' + month2;
    return t2;
}
/**
 * 格式化时间
 * @param {YYYY-MM-DD hh:mm:ss} String
 * @param {时间} date
 */
function dateFormat (fmt, date) {
    date = new Date(date);
    let ret;
    let opt = {
        'Y+': date.getFullYear().toString(), // 年
        'M+': (date.getMonth() + 1).toString(), // 月
        'D+': date.getDate().toString(), // 日
        'h+': date.getHours().toString(), // 时
        'm+': date.getMinutes().toString(), // 分
        's+': date.getSeconds().toString() // 秒
    // 有其他格式化字符需求可以继续添加,必须转化成字符串
    };
    for (let k in opt) {
        ret = new RegExp('(' + k + ')').exec(fmt);
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')));
        }
    }
    return fmt;
}
// getMonthBeginEnd(2019, 9);
// getDateBeginEnd(2019, 10, 16);
// getWeekByMonth(2019, 10, 5);

原文地址:https://www.cnblogs.com/Lewiskycc/p/11697586.html

时间: 2024-10-30 13:35:46

js获取自然周/自然月/自然日开始结束时间戳的相关文章

js获取当前年,月,日,时,分,秒

var date = new Date(); date .getYear(); //获取当前年份(2位) date .getFullYear(); //获取完整的年份(4位) date .getMonth(); //获取当前月份(0-11,0代表1月) date .getDate(); //获取当前日(1-31) date .getDay(); //获取当前星期X(0-6,0代表星期天) date .getTime(); //获取当前时间(从1970.1.1开始的毫秒数) date .getHo

iOS Dev (55) 获取当前年、月、日等信息

iOS Dev (55) 获取当前年.月.日等信息 作者:大锐哥 博客:http://prevention.iteye.com - NSDate *now = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUn

js获取某周、某月、下月、某季度的开始日期、结束日期及判断日期第几周

/** * 获取某周.某月.上月.某季度的开始日期.结束日期及判断日期第几周 */ //格式化日期:yyyy-MM-dd function formatDate(date) { var myyear = date.getFullYear(); var mymonth = date.getMonth()+1; var myweekday = date.getDate(); if(mymonth < 10){ mymonth = "0" + mymonth; } if(myweekd

【转】java获取当前年、月、日 、小时 、分钟、 秒、 毫秒

public class Test { /** * 英文简写(默认)如:2010-12-01 */ public static String FORMAT_SHORT = "yyyy-MM-dd"; /** * 英文全称 如:2010-12-01 23:15:06 */ public static String FORMAT_LONG = "yyyy-MM-dd HH:mm:ss"; /** * 精确到毫秒的完整时间 如:yyyy-MM-dd HH:mm:ss.S

获取1970年1月1日以来的天数

#!/usr/bin/ksh # AUTHOR: Xin23 # Version:  Beta 0.1  # Date:     2014-09-05 Get_Days_From_1970(){ BEGINYEAR=1970 ENDYEAR=$(date +%Y) YEARNUM=$(($ENDYEAR-$BEGINYEAR)) LYEARNUM=$(($YEARNUM/4)) RNUM=${LYEARNUM%.*} DAYNUMY=$(($YEARNUM*365)) DAYNUMZ=$(($D

时间:第1周9月16日;主题:初识ASP.NET MVC项目开发(一)

Part I:回顾及提问 ==================== 1. ASP.NET MVC是微软公司.NET平台上的一个______________,它为开发者提供了一种构建结构良好的Web应用程序的方式. 2. 自2007年首次公布预览以来,作为_____________的替代品,ASP.NET MVC的普及度已明显提高,现在很多大型Web应用程序都是使用这一技术构建的. 3. 为了简化软件开发的复杂度,以一种概念简单却又权责分明的架构来贯穿整个软件开发流程,将业务逻辑层与_______

js获取日期周数

let date = new Date(2020, 1, 9); let beginDate = new Date(date.getFullYear(), 0, 1); let week = Math.ceil((parseInt((date - beginDate) / (24 * 60 * 60 * 1000)) + 1 + beginDate.getDay()) / 7); 原文地址:https://www.cnblogs.com/idtjie/p/12172788.html

当前时间到固定日期的天数,如:在页面弹出显示到到2015年5月1日还有多少天

2015-03-28 17:46:05 <script> //获取当前系统时间 var now=new Date(); //获取2015年5月1日时间 var date1=new Date('2015/5/1'); //当前日期距初始日期的毫秒数 var s1=now.getTime(); //2015年5月1日距初始日期的毫秒数 var s2=date1.getTime(); //到2015年5月1日还有多少毫秒数 s3=s2-s1; //到2015年5月1日还有多少天 alert('距20

Js获取年月日及时间转换

1.获取年.月.日和将时间戳转换成日期格式 // 简单的一句代码var date = new Date(时间戳); //获取一个时间对象 /** 1. 下面是获取时间日期的方法,需要什么样的格式自己拼接起来就好了 2. 更多好用的方法可以在这查到 -> http://www.w3school.com.cn/jsref/jsref_obj_date.asp */date.getFullYear();  // 获取完整的年份(4位,1970)date.getMonth();  // 获取月份(0-1