前言

原生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则不是)

源代码

  1. ; (function (window, undefined) {
  2. var
  3. TimeToPack = function (e) {
  4. return new TimeToPack.fn.init(e);
  5. };
  6. TimeToPack.fn = TimeToPack.prototype = {
  7. };
  8. var init = TimeToPack.fn.init = TimeToPack.prototype.TimeToPack = function (e) {
  9. this.name = "init";
  10. };
  11. init.prototype = TimeToPack.prototype;
  12. TimeToPack.GetOneYearToDay = function () {
  13. var NowDate = new Date();
  14. var SetDate = new Date();
  15. var time1 = null, time2 = null, time_ = null;
  16. if (arguments.length === 0) {
  17. SetDate.setFullYear(new Date().getFullYear());
  18. SetDate.setMonth(0);
  19. SetDate.setDate(1);
  20. } else if (arguments.length === 1) {
  21. SetDate.setFullYear(arguments[0]);
  22. SetDate.setMonth(0);
  23. SetDate.setDate(1);
  24. } else if (arguments.length === 2) {
  25. SetDate.setFullYear(arguments[0]);
  26. SetDate.setMonth(arguments[1] - 1);
  27. SetDate.setDate(1);
  28. } else if (arguments.length === 3) {
  29. SetDate.setFullYear(arguments[0]);
  30. SetDate.setMonth(arguments[1] - 1);
  31. SetDate.setDate(arguments[2]);
  32. }
  33. time1 = Date.parse(SetDate.toLocaleDateString()) / 1000;
  34. time2 = Date.parse(NowDate.toLocaleDateString()) / 1000;
  35. time_ = time1 - time2;
  36. console.log(time_, time1, time2);
  37. if (time_ < 0) {
  38. time_ -= (time_ * 2);
  39. }
  40. return (time_ / (3600 * 24)) + 1;
  41. };
  42. TimeToPack.GetDayToWeek = function () {
  43. var target = arguments[0];
  44. if (arguments.length === 0) {
  45. target = _.GetOneYearToDay();
  46. }
  47. target /= 7;
  48. return parseInt(target);
  49. };
  50. TimeToPack.LeapYearJudgment = function () {
  51. var ADate = new Date();
  52. var target = arguments[0];
  53. if (arguments.length === 0) {
  54. target = ADate.getFullYear();
  55. }
  56. target /= 4;
  57. if (Math.floor(target) === target) {
  58. return true;
  59. }
  60. return false;
  61. }
  62. window.TimeToPack = window._ = TimeToPack;
  63. })(window, undefined);

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

  1. TimeToPack.GetOneYearToDay = function () {
  2. var NowDate = new Date();
  3. var SetDate = new Date();
  4. var time1 = null, time2 = null, time_ = null;
  5. if (arguments.length === 0) {
  6. SetDate.setFullYear(new Date().getFullYear());
  7. SetDate.setMonth(0);
  8. SetDate.setDate(1);
  9. } else if (arguments.length === 1) {
  10. SetDate.setFullYear(arguments[0]);
  11. SetDate.setMonth(0);
  12. SetDate.setDate(1);
  13. } else if (arguments.length === 2) {
  14. SetDate.setFullYear(arguments[0]);
  15. SetDate.setMonth(arguments[1] - 1);
  16. SetDate.setDate(1);
  17. } else if (arguments.length === 3) {
  18. SetDate.setFullYear(arguments[0]);
  19. SetDate.setMonth(arguments[1] - 1);
  20. SetDate.setDate(arguments[2]);
  21. }
  22. time1 = Date.parse(SetDate.toLocaleDateString()) / 1000;
  23. time2 = Date.parse(NowDate.toLocaleDateString()) / 1000;
  24. time_ = time1 - time2;
  25. console.log(time_, time1, time2);
  26. if (time_ < 0) {
  27. time_ -= (time_ * 2);
  28. }
  29. return (time_ / (3600 * 24)) + 1;
  30. };

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

  1. var NowDate = new Date();
  2. var SetDate = new Date();
  3. var time1 = null, time2 = null, time_ = null;

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

判断

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

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

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

其他判断以此类推

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

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

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

再次判断

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

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

  1. 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. (jvm调优)一、linux内存查看命令

    转载自https://blog.csdn.net/dongzhongyan/article/details/80067796 开始学习服务器性能查看以及调优 1.整体情况查看(任务管理器):top 第 ...

  2. Excel—使用if(countif())表达式来筛选两个表格中相同的数据

    关注微信公众号:CodingTechWork,一起学习进步. 引言   在线上运维的过程中,遇到一个头疼的事情,有一些合作公司的数据直接从平台上down下来是一个excel,然后发到研发手里去数据库中 ...

  3. adrci清理日志

    adrci> show home adrci> set home diag/rdbms/mesp/MESP adrci> help purge adrci> purge -ag ...

  4. 关于bat/cmd中转义符的使用

    今天笔者在cmd中准备使用echo 输出<https://www.cnblogs.com/5201351> 发现直接就报错:命令语法不正确. 然后就想到可能是<和>在cmd中有 ...

  5. 刷题[安洵杯 2019]easy_web

    前置知识 md5碰撞: %4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e% ...

  6. Python-变量-数字类型

    数字 number 整形 int 浮点型 float bool True(=1) False(=0) int_num = 10 float_num = 10.1 bool_True = True bo ...

  7. Python练习题 001:4个数字求不重复的3位数

    听说做练习是掌握一门编程语言的最佳途径,那就争取先做满100道题吧. ----------------------------------------------------------------- ...

  8. java泛型之通配符?

    一.在说泛型通配符" ?" 之前先讲几个概念 1.里氏替换原则(Liskov Substitution Principle, LSP): 定义:所有引用基类(父类)的地方必须能透明 ...

  9. MarkDown系列教程

    编辑了一个Markdown的系列教程,前一部分是摘编自 菜鸟教程 网站 目录 第一篇 Markdown 使用教程 入门

  10. Layman 解决MUI 软键盘弹起挤压页面问题

    问题:在使用mui和H5+进行移动端开发的时候,经常会遇见需要用户输入的情况 当input获取焦点弹起软键盘的时候,经常会遇见软键盘挤压页面.软键盘遮挡输入框等一系列问题: 原因:造成这种现象的原因是 ...