JavaScript日期集合(今日,昨日,本周一,周末 ,月初,月末)

闲聊:新年第一天上班,看着自己15年年底写的代码,真心觉得很烂,因为年底没时间去写,一想着做后台管理需要获取一周的开始和结束日期,就慌了,项目赶着测试呢,还有好多事情未做,就直接抄袭了网上的一段错误代码,其实真的很简单,今天重新花点时间封装一下,以备后用,大神勿喷,谢谢!

一、封装为jQuery版日期集合插件

jQuery.dateCollections = (function(){

    var nowDate = new Date();
    var cloneNowDate = new Date();

    var fullYear = nowDate.getFullYear();
    var month = nowDate.getMonth() + 1; // getMonth 方法返回 0-11,代表1-12月
    var date = nowDate.getDate();

    var endOfMonth = new Date(fullYear, month, 0).getDate(); // 获取本月最后一天

    // 格式化日期 (2016-02-14)
    function getFullDate(targetDate) {
        var D, y, m, d;
        if (targetDate) {
            D = new Date(targetDate);
            y = D.getFullYear();
            m = D.getMonth() + 1;
            d = D.getDate();
        } else {
            y = fullYear;
            m = month;
            d = date;
        }
        m = m > 9 ? m : '0' + m;
        d = d > 9 ? d : '0' + d;

        return y + '-' + m + '-' + d;
    }

    // 一天的时间戳(毫秒为单位)
    var timestampOfDay = 1000*60*60*24;

    // 今天,昨天
    var fullToday = getFullDate();
    var fullYesterday = getFullDate(nowDate - timestampOfDay);

    var nowDay = nowDate.getDay(); // getDay 方法返回0 表示星期天
    nowDay = nowDay === 0 ? 7 : nowDay;

    // 本周一,本周末(星期天)
    // 注:在safari下(nowDate +- 0)不会转换为时间戳,这里在nowDate前加上运算符+,手动转换时间戳运算
    var fullMonday = getFullDate( +nowDate - (nowDay-1)*timestampOfDay );
    var fullSunday = getFullDate( +nowDate + (7-nowDay)*timestampOfDay );

    // 月初,月末
    var fullStartOfMonth = getFullDate( cloneNowDate.setDate(1) );
    var fullEndOfMonth = getFullDate( cloneNowDate.setDate(endOfMonth) );

    return {
        fullToday: fullToday,
        fullYesterday: fullYesterday,
        fullMonday: fullMonday,
        fullSunday: fullSunday,
        fullStartOfMonth: fullStartOfMonth,
        fullEndOfMonth: fullEndOfMonth
    };

}());

二、封装为模块,可用于webpack工具打包

var nowDate = new Date();
var cloneNowDate = new Date();

var fullYear = nowDate.getFullYear();
var month = nowDate.getMonth() + 1; // getMonth 方法返回 0-11,代表1-12月
var date = nowDate.getDate();

var endOfMonth = new Date(fullYear, month, 0).getDate(); // 获取本月最后一天

// 格式化日期 (2016-02-14)
function getFullDate(targetDate) {
    var D, y, m, d;
    if (targetDate) {
        D = new Date(targetDate);
        y = D.getFullYear();
        m = D.getMonth() + 1;
        d = D.getDate();
    } else {
        y = fullYear;
        m = month;
        d = date;
    }
    m = m > 9 ? m : '0' + m;
    d = d > 9 ? d : '0' + d;

    return y + '-' + m + '-' + d;
}

// 一天的时间戳(毫秒为单位)
var timestampOfDay = 1000*60*60*24;

// 今天,昨天
var fullToday = getFullDate();
var fullYesterday = getFullDate(nowDate - timestampOfDay);

var nowDay = nowDate.getDay(); // getDay 方法返回0 表示星期天
nowDay = nowDay === 0 ? 7 : nowDay;

// 本周一,本周末(星期天)
// 注:在safari下(nowDate +- 0)不会转换为时间戳,这里在nowDate前加上运算符+,手动转换时间戳运算
var fullMonday = getFullDate( +nowDate - (nowDay-1)*timestampOfDay );
var fullSunday = getFullDate( +nowDate + (7-nowDay)*timestampOfDay );

// 月初,月末
var fullStartOfMonth = getFullDate( cloneNowDate.setDate(1) );
var fullEndOfMonth = getFullDate( cloneNowDate.setDate(endOfMonth) );

module.exports = {
    fullToday: fullToday,
    fullYesterday: fullYesterday,
    fullMonday: fullMonday,
    fullSunday: fullSunday,
    fullStartOfMonth: fullStartOfMonth,
    fullEndOfMonth: fullEndOfMonth
};

总结:代码中就两难点,一是获取月末的最后一天日期,二是求 一周的开始和结束日期时间,第一点是知不知道的问题,第二点是比较今日与周末(星期天),周一各差几天,加减相差的时间戳获取相应的日期,总之说难不难,说不难可能当你在百忙之中确实要花点时间,保持清醒的头脑;

时间: 2024-09-28 20:45:37

JavaScript日期集合(今日,昨日,本周一,周末 ,月初,月末)的相关文章

获取指定日期的常用前后节点(月初月末周一周末等等)

原文:获取指定日期的常用前后节点(月初月末周一周末等等) 注:周节点方面是根据中国习惯,视周一为起,周日为末. /*--------------------------------- 函数:获取某日期的特定起止节点v0.01 Author:AhDung Update:201305151755 ---------------------------------*/ ALTER FUNCTION dbo.FGetSpecialDate_ahdung(@date DATE, @SpcDate VARC

javascript日期验证

以下方法[chekDate]验证类似"YYYY-MM-DD"格式的日期输入.包括日期实际性验证. 若日期正确,返回true;否则返回false. function checkDate(theDate){ var reg = /^\d{4}-((0{0,1}[1-9]{1})(1[0-2]{1}))-((0{0,1}[1-9]{1})([1-2]{1}[0-9]{1})(3[0-1]{1}))$/; var result=true; if(!reg.test(theDate)) resu

Javascript日期级联组件代码分析及demo

最近研究下JS日期级联效果 感觉还不错,然后看了下kissy也正好有这么一个 组件,也看了下源码,写的还不错,通过google最早是在2011年 淘宝的虎牙(花 名)用原审JS写了一个(貌似据说是从YUI那边重构下的) 具体的可以看他的 博 客园 , 感觉kissy组件源码 思路也是和YUI类似 所以我今天的基本思路也和他们 的一样 只是通过自己分析下及用自己的方式包装下. 基本原理 1.传参中有 '年份下拉框dom节点', '月份下拉框dom节点', '天数下拉框dom 节点', "开始日期&

javascript日期计算实例分析

  本文实例讲述了javascript日期计算.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 function setLeaveDate(){ var inDay=$("#date_6").val(); // 获取的日期格式为2014-07-03 var date=inDay.split('-'); // 将日期分隔成数字 var num=$(&quo

javascript日期对象格式化为字符串的实现方法

 本篇文章主要是对javascript日期对象格式化为字符串的实现方法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 javascript提供的日期格式化太简单,一般应用都需要自己实现格式化方法.下面是我想出的一个格式化处理方案,应该是可以满足常用的需求.日期模板中可以使用任意分隔符,还可以使用文字作为分隔符,甚至支持类似yyyyMMdd之类没有分隔符的格式化.    原理:用正则表达式将日期模板中的日期元素[如yyyy, MM, dd]和分隔符拆分成数组,然后用实际的值替换日期

JavaScript日期类型的一些用法介绍

 这篇文章主要介绍了JavaScript日期类型的一些用法介绍,本文讲解了获取某个月份的天数.获取时区.计算运行时间.删除cookie等用法,需要的朋友可以参考下     获取某个月份的天数 相信大家读小学的时候就知道一年十二个月各有多少天了,这里面有个特殊的存在--2月.闰年的2月有29天,非闰年的2月只有28天.估计不少人跟我一样,已经不记得闰年的规则了,这时候,下面的这个方法就派上用场了. 代码如下: var date = new Date(2013, 2, 0); date.getDat

javascript日期格式化示例

 这篇文章主要介绍了javascript日期格式化示例,需要的朋友可以参考下  代码如下: /**    * 格式化日期    * @param {Object} ms 表示指定日期与 1970 年 1 月 1 日午夜间全球标准时间的毫秒数    * @return year-month-date hh:mm    */    Util.parseToDate = function(ms){             var date = (new Date(parseInt(ms)));    

JavaScript日期相减得到第二个日期

  JavaScript日期相减计算,然后得到第二个日期.在平时遇到时间加减的机率也是比较大,以下JS函数可完成指定天数减去某天数,计算出另外一个日期,在很多地方都可以用到.需要的可看下函数代码,里面有用法示例,后面还有参数说明. 参数说明:本函数牵扯两个参数:dd:需要进行计算的日期;dadd:减去的天数,比如2天.3天.

javascript日期处理函数,性能优化批处理_基础知识

其实网上写javascript日期格式化的博文很多,大体都看了看,都还不错.唯一遗憾的是只顾着实现了功能,没对函数进行性能优化. 俗话说:不要重复造轮子.google上找了一个比较不错的日期格式化函数,来开始我的优化之旅吧! google上找的这个日期函数化函数,估计大家都很眼熟,以前我也一直在用.先看看优化后和优化前的效率对比吧! 1.优化之前的toDate函数(字符串转换成Date对象),重复执行1万次,耗时660毫秒 2.优化之前的dateFormat函数(Date对象格式化成字符串),重