/**
 *  DK 命名空间  防止全局变量污染
 */
var DK = {} ;
/**
 * 获取前几个月,默认为一个月,当前时间
 * @author duke
 * @date 格式为yyyy-mm-dd的日期,如:2014-01-25
 */
DK.getPreMonth = function() {
var obj = DK.init(arguments);
var dtObj = DK.sptDtStr(obj.dtStr);
//如果大于12个月,先算年
if (obj.num >= 12) {
dtObj.year -= parseInt(obj.num / 12);
}
//年计算结束后,计算月,月如果是负数,年减1,月加12.
dtObj.month -= obj.num % 12;
if (dtObj.month <= 0) {
dtObj.year--;
dtObj.month += 12;
}
//获取该月组后一天,也就是天数。
var lastDay = new Date(dtObj.year, dtObj.month, 0).getDate();
if (dtObj.day > lastDay) {
dtObj.day = lastDay;
}
return dtObj.year + '-' + dtObj.month + '-' + dtObj.day;
}
/**
 * 获取前几天,默认为一天,当前时间
 */
DK.getPreDay = function() {
var obj = DK.init(arguments);
var dtObj = DK.sptDtStr(obj.dtStr);
var dtTime = new Date(dtObj.year, dtObj.month - 1, dtObj.day).getTime();
return DK.dtToStr(new Date(dtTime - obj.num * 86400000));
}
/**
 * 获取前几周,默认为一周,当前时间num,date
 */
DK.getPreWeek = function() {
var obj = DK.init(arguments);
return DK.getPreDay(7 * obj.num, obj.dtStr);
}
/**
 * 日期类型转换为字符串类型,默认当前日期
 */
DK.dtToStr = function(date) {
date = date || new Date();
return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
}
/**
 * 格式化日期字符串
 */
DK.formatdtStr = function(date) {
var dtObj = DK.sptDtStr(date);
//日月补0
if (dtObj.month < 10) {
dtObj.month = '0' + dtObj.month;
}
if (dtObj.day < 10) {
dtObj.day = '0' + dtObj.day;
}
return dtObj.year + '-' + dtObj.month + '-' + dtObj.day;
}
/**
 * 初始化参数
 */
DK.init = function(arguments) {
//数量和日期字符串
var obj = {
num:1,
dtStr:(function(){
return DK.dtToStr();
})()
}
if (arguments.length === 1) {
var arg = arguments[0];
if (arg instanceof Date) {
obj.dtStr = DK.dtToStr(arg);
} else if(typeof arg == 'string') {
obj.dtStr = arg;
} else if(typeof arg == 'number') {
obj.num = arg;
} else {
throw new Error('arg type error');
}
} else if(arguments.length === 2) {
var arg1 = arguments[0], arg2 = arguments[1];
if ((arg1 instanceof Date || typeof arg1 == 'string') && typeof arg2 == 'number') {
if(typeof arg1 == 'string'){
obj.dtStr = arg1;
}else{
obj.dtStr = DK.dtToStr(arg1);
}
obj.num = arg2;
} else if((arg2 instanceof Date || typeof arg2 == 'string') && typeof arg1 == 'number') {
if (typeof arg2 == 'string') {
obj.dtStr = arg2;
} else {
obj.dtStr = DK.dtToStr(arg2);
}
obj.num = arg1;
} else {
throw new Error('arguments type error');
}
} else if(arguments.length > 2) {
throw new Error('too many arguments');
}
return obj;
}
/**
 * 分割日期字符串
 */
DK.sptDtStr = function(dtStr) {
var dtObj = {};//日期对象
var dtArr = dtStr.split('-');
dtObj.year = parseInt(dtArr[0]); //获取当前日期的年份
dtObj.month = parseInt(dtArr[1]); //获取当前日期的月份
dtObj.day = parseInt(dtArr[2]); //获取当前日期的日
return dtObj;
}

//该js文件主要是现了,无论是几个参数(两个以内),无论是参数顺序,都可以获取以前的时间。

//主要是在默认值方面做了大量的改进,虽说存在许多的不必要,但是做基础框架不就是多做一点事情吗

//当然这里面肯定还有许多不足,大家一起交流。

js获取几个月前,几周前时间。的更多相关文章

  1. js获取上一个月、下一个月格式为yyyy-mm-dd的日期

    /** * 获取上一个月 * * @date 格式为yyyy-mm-dd的日期,如:2014-01-25 */ function getPreMonth(date) { var arr = date. ...

  2. JS 获取当天所在月的第一天的日期,最后一天日期,所在周的每天的日期,时间,所在每月日期,时间的计算

    /** * 获取当天所在月的最后一天日期,和下一个月的第一天日期 * 调用getMonthDay(d), d默认值为01,d为要设置成的day: */ const getMonthMaxDay = ( ...

  3. 用javascript写一个显示时间差 几分钟前 几小时前 几天前 几周前 大于一个月显示日期

    window.onload = function(){ var show_times = $(".times span"); for(var i=0;i<show_times ...

  4. js获取上一个月、下一个月

    /** * 获取上一个月 * * @date 格式为yyyy-mm-dd的日期,如:2014-01-25 */ function getPreMonth(date) { var arr = date. ...

  5. JS获取当前年份月

    //获取完整的日期 var date=new Date; var year=date.getFullYear();  var month=date.getMonth()+1; month =(mont ...

  6. js获取某年某月一共多少天

    const getDaysInMonth = (year, month) => { let date = new Date(year, month, 1); return new Date(da ...

  7. [python实用代码片段]python获取当前时间的前一天,前一周,前一个月

    python获取当前时间的前一天,前一周,前一个月. 实用python的datetime.timedelta方法,避免了有的月份是30和31等不同的情况. 获取前一个月的时间,方法实现:首先datet ...

  8. 用js获取周、月第一天和最后一天(转载)

    var getCurrentWeek = function (day) { var days = ["周日", "周一", "周二", &q ...

  9. Oracle获取一周前,一个月前,一年前, 本周,本月,当年的日期

    1.获取当前时间一周前的日期 ' day from dual 类似的 --当前时间减去7分钟的时间 ' MINUTE from dual --当前时间减去7小时的时间 ' hour from dual ...

随机推荐

  1. Python的面向对象1

    今天,我们来介绍Python的面向对象编程,其实面向对象并不陌生,在C++  ,Java  ,PHP中也有大量使用! 好了,我们来步入正题! 那什么是面向对象编程呢? 1. 面向对象编程是一种程序设计 ...

  2. web2.0最全的国外API应用集合

    web2.0最全的国外API应用集合 原文地址:http://www.buguat.com/post/98.html 2.0时代,越来越多的API被大家广泛应用,如果你还不了解API是何物,请看这里的 ...

  3. Case When PK PIVOT

    SELECT *FROM ScoreInfogo Name Course Score---------- ---------- -----------Lucy Chinese 74Jim Math 8 ...

  4. ArrayList与LinkedList实现比较

    1.ArrayList实现是基于数组来实现的,这可由ArrayList的源码看出: public class ArrayList<E> extends AbstractList<E& ...

  5. Colored Sticks

    poj2513:http://poj.org/problem?id=2513 题意:就是求一个欧拉回路. 题解:本题是判断欧拉通路是否存在,但是如果是用map的话就会超时,这里采用了trie树,有发现 ...

  6. 【网络流24题】 No.6 最长不减子序列问题 (最大流)[模型:最多不相交路径]

    [题意] 给定正整数序列x1 ,x2 , x3... ( 1)计算其最长不减子序列的长度 s.( 2)计算从给定的序列中最多可取出多少个长度为 s 的不减子序列.( 3) 如果允许在取出的序列中多次使 ...

  7. Buying Feed, 2010 Nov (单调队列优化DP)

    约翰开车回家,又准备顺路买点饲料了(咦?为啥要说"又"字?)回家的路程一共有 E 公里,这一路上会经过 K 家商店,第 i 家店里有 Fi 吨饲料,售价为每吨 Ci 元.约翰打算买 ...

  8. 周鸿祎——不要抱着打工心态去工作,而是把工作当创业(附读书笔记) good

    360周鸿祎反而最为开明,他说“不要抱着打工心态去工作,而是把工作当创业”,就像是,鼓励你拿着公司的工资,锻炼自己的能力,为自己以后创业积累资源和人脉(读书笔记:真是天底下最好的机会,天底下没有比工作 ...

  9. HTML图片热点、网页划区、拼接、表单

    一.图片热点: 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果. 示例: 二.网页划区: 在一个网页里,规划出一个区域用来展示另一个网页的内容. 示例: 三.网页的拼接: ...

  10. 【Xamarin挖墙脚系列:配置Mac之间的连接问题】

    原文:[Xamarin挖墙脚系列:配置Mac之间的连接问题] 首先建议把MAC的防火墙关掉,呵呵, 其次,去设置里,允许所有用户远程登录连接MAC