前言

原生JS有些没定义的方法只能自己封装了,比如获取现在相隔本年过了几天以及过了多少周,这些都是原JS里没有的方法,现在插件只有一些方法,后期再慢慢扩展
插件使用方法

  1. 引用TimeToPack.js文件

  2. 调用_.GetOneYearToDay()得到本年已经过了几天

  3. 调用_.GetOneYearToDay(int Year,int Month,int Day) 参数(int年,int月,int日),通过参数得到相隔今日时间,3个参数可选填,比如_.GetOneYearToDay(2019,3)这样默认获取2019/3/1相隔今日时间

  4. 调用_.GetDayToWeek()得到现在是第几周

  5. 调用_.GetDayToWeek(int Day)通过参数得到周数

  6. 调用_.LeapYearJudgment()得到今年是否是闰年(返回true则是,返回false则不是)

  7. 调用_ LeapYearJudgment(int Year)通过参数获取是否是闰年(返回true则是,返回false则不是)

源代码

; (function (window, undefined) {

    var
TimeToPack = function (e) {
return new TimeToPack.fn.init(e);
}; TimeToPack.fn = TimeToPack.prototype = {
}; var init = TimeToPack.fn.init = TimeToPack.prototype.TimeToPack = function (e) { this.name = "init";
}; init.prototype = TimeToPack.prototype; TimeToPack.GetOneYearToDay = function () { var NowDate = new Date();
var SetDate = new Date();
var time1 = null, time2 = null, time_ = null;
if (arguments.length === 0) {
SetDate.setFullYear(new Date().getFullYear());
SetDate.setMonth(0);
SetDate.setDate(1);
} else if (arguments.length === 1) {
SetDate.setFullYear(arguments[0]);
SetDate.setMonth(0);
SetDate.setDate(1);
} else if (arguments.length === 2) {
SetDate.setFullYear(arguments[0]);
SetDate.setMonth(arguments[1] - 1);
SetDate.setDate(1);
} else if (arguments.length === 3) {
SetDate.setFullYear(arguments[0]);
SetDate.setMonth(arguments[1] - 1);
SetDate.setDate(arguments[2]);
}
time1 = Date.parse(SetDate.toLocaleDateString()) / 1000;
time2 = Date.parse(NowDate.toLocaleDateString()) / 1000;
time_ = time1 - time2;
console.log(time_, time1, time2);
if (time_ < 0) {
time_ -= (time_ * 2);
}
return (time_ / (3600 * 24)) + 1; }; TimeToPack.GetDayToWeek = function () {
var target = arguments[0];
if (arguments.length === 0) {
target = _.GetOneYearToDay();
}
target /= 7;
return parseInt(target);
}; TimeToPack.LeapYearJudgment = function () {
var ADate = new Date();
var target = arguments[0];
if (arguments.length === 0) {
target = ADate.getFullYear();
}
target /= 4;
if (Math.floor(target) === target) {
return true;
}
return false;
} window.TimeToPack = window._ = TimeToPack; })(window, undefined);

源码解析
抽取一部分方法解析

TimeToPack.GetOneYearToDay = function () {

            var NowDate = new Date();
var SetDate = new Date();
var time1 = null, time2 = null, time_ = null;
if (arguments.length === 0) {
SetDate.setFullYear(new Date().getFullYear());
SetDate.setMonth(0);
SetDate.setDate(1);
} else if (arguments.length === 1) {
SetDate.setFullYear(arguments[0]);
SetDate.setMonth(0);
SetDate.setDate(1);
} else if (arguments.length === 2) {
SetDate.setFullYear(arguments[0]);
SetDate.setMonth(arguments[1] - 1);
SetDate.setDate(1);
} else if (arguments.length === 3) {
SetDate.setFullYear(arguments[0]);
SetDate.setMonth(arguments[1] - 1);
SetDate.setDate(arguments[2]);
}
time1 = Date.parse(SetDate.toLocaleDateString()) / 1000;
time2 = Date.parse(NowDate.toLocaleDateString()) / 1000;
time_ = time1 - time2;
console.log(time_, time1, time2);
if (time_ < 0) {
time_ -= (time_ * 2);
}
return (time_ / (3600 * 24)) + 1; };

这个GetOneYearToDay()方法就是返回过了本年的天数
声明变量

var NowDate = new Date();
var SetDate = new Date();
var time1 = null, time2 = null, time_ = null;

arguments是获取参数
没有参数传入会返回长度为0的数组,有参数传入就会返回N个参数长度

判断

if (arguments.length === 0) {}

如果arguments返回的长度强等于0就会执行下面的代码,也就是GetOneYearToDay()不给参数就会执行这里的代码

    SetDate.setFullYear(new Date().getFullYear()); //设置SetDate的年份为本年
SetDate.setMonth(0);//设置SetDate的月份为1月,因为月份是有索引的索引0就是1月
SetDate.setDate(1);设置SetDate的日期为1日

其他判断以此类推

time1 = Date.parse(SetDate.toLocaleDateString()) / 1000;
time2 = Date.parse(NowDate.toLocaleDateString()) / 1000;
time_ = time1 - time2;

前面判断完成就给每个变量赋值

Date.parse()把括号里的日期转为毫秒
SetDate.toLocaleDateString()获取当前日期的字符串
Date.parse(SetDate.toLocaleDateString()) / 1000 得到秒数
time1 – time2 得到相差值

再次判断

if (time_ < 0) {
time_ -= (time_ * 2);
}

如果 time_值为负数 则 time_ 减它(本身 * 2)再赋值 就会返回正数

return (time_ / (3600 * 24)) + 1;

最后返回 time_ / (3600 * 24) + 1 得到相差天数

END

JS时间扩展插件的更多相关文章

  1. 一款好用的JS时间日期插件layDate

    觉得这个插件很不错,使用起来也很方便,推荐使用 1.插件截图 2.插件配置 选择很多,配置也很简单,插件官网:https://www.layui.com/laydate/配置说得很明确,基本操作就是: ...

  2. jQuery时间轴插件timeline.js

    http://www.jq22.com/jquery-info13695 http://www.jq22.com/jquery-info13357 简要教程 timeline.js是一款jQuery时 ...

  3. js时间倒计时

    看了网上的其他的例子,觉得写的都有点复杂,不好理解,于是自己动手写了个. 本来想封装成jquery插件,但是觉得因为功能很简单,没有必要做成jquery插件,引用的时候不需要引入jqery库,这里直接 ...

  4. 自制Chrome扩展插件:用于重定向js

    前言 作为一个前端开发, 在调试生产环境的代码时,是否苦于生产环境代码被压缩,没有sourcemap? 有没有想过将生产环境的js直接重定向为本地开发环境的js? 玩微前端时,有没有想过用本地的子应用 ...

  5. jQuery时间格式插件-moment.js的使用

    jQuery时间格式插件-moment.js的使用 moment.js插件的使用,使用之前在页面引入对应的js文件: 详细的操作可见moment中文官网:http://momentjs.cn/ 日期格 ...

  6. Sharepoint 2013列表视图和字段权限扩展插件(免费下载)!

    记得2014年春节期间,有博客园的网友通过QQ向我咨询Sharepoint 2013列表视图和字段权限扩展,因为之前他看到我博客介绍Sharepoint 2010列表视图和字段的权限控制扩展使用,问有 ...

  7. jQuery时间轴插件:jQuery Timelinr

    前言 这是一款可用于展示历史和计划的时间轴插件,尤其比较适合一些网站展示发展历程.大事件等场景.该插件基于jQuery,可以滑动切换.水平和垂直滚动.支持键盘方向键.经过扩展后可以支持鼠标滚轮事件. ...

  8. 100个精选zencart扩展插件

    100个精选zencart扩展插件 特别推荐 1. 数据库备份 2. 产品横向布局. 3. 邮件订阅Newsletter Subscribe. 4. google 翻译google_translate ...

  9. Chrome扩展插件流程

    一.浏览器插件基础步骤: 1.文件最基础的配置 : 一个manifest文件.一个或多个html文件.可选的一个或多个javascript文件.可选的任何需要的其他文件,例如图片:在开发应用(扩展)时 ...

随机推荐

  1. 安装Scrapy提示ERROR: 'xslt-config' 不是内部或外部命令,也不是可运行的程序

    环境:win7.Python 2.7.12.PyCharm 2016.3 Requirement already satisfied (use --upgrade to upgrade): scrap ...

  2. Centos6.5 离线 Openssh 升级

    目录 OpenSSH 升级 一.基于 Dropbear 设置备用 ssh 服务器 二. Openssh 更新 2.1 ssh配置 备份 2.2 openssh 升级 Openssl 升级(由于Open ...

  3. 认证授权:IdentityServer4 - 单点登录

    前言 上一篇文章介绍了IdentityServer4的各种授权模式,本篇继续介绍使用IdentityServer4实现单点登录效果. 单点登录(SSO) SSO( Single Sign-On ),中 ...

  4. @JsonCreator自定义反序列化函数-JSON框架Jackson精解第5篇

    Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的, ...

  5. Hive 窗口函数sum() over()求当前行和前面n条数据的和

    前几天遇到一个这样的需求:销售总占比加起来超过75%的top分类.具体需求是这样的:商品一级分类标签下面有许多商品标签,例如运动户外一级标签,下面可能存在361°,CBA,Nike,Adidas... ...

  6. 《Netty权威指南》笔记

    第1章 Java的I/O演进之路 1.1 Linux网络I/O模型 fd:file descriptor,文件描述符.linux内核将所有外部设备都看作一个文件来操作,对文件的读写会调用内核提供的命令 ...

  7. C# NX二次开发环境搭建

    在网上看到一篇C#二次开发环境搭建的文章:NX二次开发-使用NXOPEN C#手工搭建开发环境配置 ,写得非常好.我按照文章操作,过程中遇到几个问题,把问题分享给大家,希望对各位有帮助. 注意三点: ...

  8. 新版 C# 高效率编程指南

    前言 C# 从 7 版本开始一直到如今的 9 版本,加入了非常多的特性,其中不乏改善性能.增加程序健壮性和代码简洁性.可读性的改进,这里我整理一些使用新版 C# 的时候个人推荐的写法,可能不适用于所有 ...

  9. 对Elasticsearch生命周期的思考

    什么是es索引的生命周期?有啥用?可以怎么用?用了有什么好处呢? 在现实的生产环境中有没有觉得自己刚开始设计的索引的分片数刚刚好,但是随着时间的增长,数据量增大,增长速度增大的情况下,你的es索引的设 ...

  10. Python-列表推导式、生成器、字典推导式

    列表推导式 [] + for + if 算子.循环.条件, 对相同的数据进行处理, 算子也可以是函数 number = [i for i in range(1, 101) if i % 2 == 0] ...