前言

原生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. spring cloud微服务快速教程之(十二) 分布式ID解决方案(mybatis-plus篇)

    0-前言 分布式系统中,分布式ID是个必须解决的问题点: 雪花算法是个好方式,不过不能直接使用,因为如果直接使用的话,需要配置每个实例workerId和datacenterId,在微服务中,实例一般动 ...

  2. 解决ExcelReport导出Excel报Number of rules must not exceed 3错误的问题

    报错信息: Number of rules must not exceed 3 [ArgumentException: Number of rules must not exceed 3] NPOI. ...

  3. 透过 Cucumber 学习 BDD

    在需求的开发过程中,最令人困惑的地方就在于需求模糊.需求是解决业务的问题,那么验收的方式应该是由业务方提出,但是往往业务方(可能是产品经理,也可能是直接是客户)只能给出比较模糊的一个验收标准,而程序却 ...

  4. [Node]创建静态资源服务器

    项目初始化 .gitignore cnpm i eslint -D eslint --init得到.eslintrc.js .eslintrc.js module.exports = { 'env': ...

  5. Boolean.valueOf(String)

    Boolean.valueOf(String) a. 当 String 的参数值在不区分大小写的时候等于 "true" ,则 Boolean.valueOf(String) 返回值 ...

  6. 浅谈c++(一)

    本人为菜鸟一枚,如有错误,欢迎指正. 由于上半年学了C语言,为了更好的过渡到C++,我将在未来展示一下两者的不同以及优缺点.在c++中,不得不谈到类.这是C++中最重要的语法特征.我们可以通过它,定义 ...

  7. Guava Cache详解

    适用性 缓存在很多场景下都是相当有用的.例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存 Guava Cache与ConcurrentMap很相似,但也不 ...

  8. dubbo学习(二)配置dubbo XML方式配置

    provider(生产者) <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo= ...

  9. jquery学习:

    1.什么是jQuery jquery 全称 javaScript Query.是js的一个框架.本质上仍然是js. 2.jQuery的特点 支持各种主流的浏览器. 使用特别简单 拥有便捷的插件扩展机制 ...

  10. centos7下安装MySQL 5.7.26 二进制版本(免安装绿色版)

    MySQL 5.7.26 二进制版本安装(免安装绿色版) 下载地址 https://downloads.mysql.com/archives/community/ https://cdn.mysql. ...