<script>
function isleapyear(year)
{
if(parseInt(year)%4==0 && parseInt(year)%100!=0)return true;
if(parseInt(year)%400==0)return true;
return false;
} function datedrift(date,difference)
{
if(date.constructor!==Date)return Date();
var year=parseInt(date.getUTCFullYear()),
mon=parseInt(date.getUTCMonth())+1,
day=parseInt(date.getUTCDate());
if(typeof difference!="string" || difference.length==0)return date;
var units=difference.match(/([+-]\d{1,3}[myd])/ig);
for(var i=0;i<units.length;i++)
{
if(units[i].charAt(0)=='+')
{
var mark=units[i].substr(-1,1);
var value=parseInt(units[i].substr(1,units[i].length-2));
if(mark =='y')
{
year=year+value;
if(day==29)
{
year=year+value;
if(mon==2)
{
if(!isleapyear(year))
day=28;
}
}
}
else if(mark == 'm')
{
year+=Math.floor((value+mon-1)/12);
mon=(value+mon-1)%12+1;
if(day==29 && mon==2 && !isleapyear(year))day=28;
else if(day>=30 && mon==2)
{
if(isleapyear(year))day=29;
else day=28;
}
else if(day==31 && (mon==4 || mon==6 || mon==9 || mon==11))day=30;
}
else if(mark== 'd')
{
var tmp=new Date();
tmp.setTime(Date.parse(year+'-'+mon+'-'+day)+value*24*36e5);
year=tmp.getUTCFullYear();
mon=tmp.getUTCMonth()+1;
day=tmp.getUTCDate();
} }
else
{
var mark=units[i].substr(-1,1);
var value=parseInt(units[i].substr(1,units[i].length-2));
switch(mark)
{
case "y":
year-=value;
if(day==29)
{
if(mon==2)
{
if(!isleapyear(year))
day=28;
}
}
break;
case "m":
var minusyear=Math.floor(value/12);
if(value%12>0)
{
year=year-minusyear-1;
year+=Math.floor((mon+11-value%12)/12);
mon=(mon+11-(value%12))%12+1; if(day==29 && mon==2 && !isleapyear(year))day=28;
else if(day>=30 && mon==2)
{
if(isleapyear(year))day=29;
else day=28;
}
else if(day==31 && (mon==4 || mon==6 || mon==9 || mon==11))day=30;
}
else
{
year=year-minusyear;
if(day==29 && mon==2 && !isleapyear(year))day=28;
else if(day>=30 && mon==2)
{
if(isleapyear(year))day=29;
else day=28;
}
else if(day==31 && (mon==4 || mon==6 || mon==9 || mon==11))day=30;
}
break;
case "d":
var tmp=new Date();
tmp.setTime(Date.parse(year+'-'+mon+'-'+day)-value*24*36e5);
year=tmp.getUTCFullYear();
mon=tmp.getUTCMonth()+1;
day=tmp.getUTCDate();
break;
}
}
}
alert([year,mon,day]);
}
var curdate=new Date();
datedrift(curdate,"+5m -5m");
</script>

js 日期按年月日加减的更多相关文章

  1. js实现输入框数量加减【转】

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. js实现购买数量加减效果

    写在前面:当我们需要在多个页面都有操作数量的需求时的一种解决方案 结构: js代码: <script type="text/javascript"> function ...

  3. shell日期格式化、加减运算

    #!/bin/bash echo i love you输出:i love you =======================================反引号的作用============== ...

  4. js 时间格式,加减

    Date.prototype.Format = function (fmt) { //author: rixiao var o = { "M+": this.getMonth() ...

  5. Java 日期工具类(日期,月份加减等)--转

    package util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.C ...

  6. 日期类的加减及java中所以日期类的操作算法大全

    1.计算某一月份的最大天数 1Calendar time=Calendar.getInstance();2time.clear();3time.set(Calendar.YEAR,year); //y ...

  7. js 购物车的数量加减,对应的总价也随机变化

    html相关的源码: <div class="goods_num clearfix"> <div class="num_name fl"> ...

  8. js 时间格式化 -- 时间加减实现

    时间格式化的方法: Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.ge ...

  9. MYSQL日期类型的加减更新使用INTERVAL 1 DAY

    例如:UPDATE teachingplan SET teachPlanBeginTime = teachPlanBeginTime +INTERVAL 1 DAY

随机推荐

  1. jQuery ------------> 验证表单

    简单的东西重复做,做多了之后,才能说熟能生巧. 做好一个精美的页面,固然是好,但是,一个页面除了写好之外,我们更需要的是将其功能完善.比如表单的验证,这只是众多工作之一.然后本次就以jQuery的va ...

  2. STM32学习笔记(五) USART异步串行口输入输出(轮询模式)

    学习是一个简单的过程,只要有善于发掘的眼睛,总能学到新知识,然而如何坚持不懈的学习却很困难,对我亦如此,生活中有太多的诱惑,最后只想说一句勿忘初心.闲话不多扯,本篇讲诉的是异步串行口的输入输出,串口在 ...

  3. HBase之计数器

    HBase计数器 #创建counters表 列族['daily','weekly','monthly'] hbase(main):001:0> create 'counters','daily' ...

  4. KindEditor4.1.10,支持粘贴图片(转载!)

    本人扩展了KindEditor4.1.10,使得他能够在Chrome和IE11中直接粘贴复制的图片(比如通过截图工具把图片直接保存在剪切板中),然后调用上传URL上传图片 方法,修改kindedito ...

  5. 【nginx】利用yum源安装nginx

    先安装nginx的yum源 http://nginx.org/en/linux_packages.html#stable 找到链接,安装: rpm -ivh http://nginx.org/pack ...

  6. SQL Server 用户名密码查看

    因为SQL Server是默认使用Windows身份验证的,很多时间就会慢慢忘记掉原来设置的密码,那么怎么重新设置用户名密码呢 这里以SQL Server2013为例,先以windows身份验证登陆进 ...

  7. bugfree安装

    1.下载xampp文件:xampp-linux-x64-5.5.30-3-installer.run 2.安装此文件,用root账号安装,安装命令:./xampp-linux-x64-5.5.30-3 ...

  8. python中列表的常用方法

    s=[1,2,3] s[3]=12#列表长度小于3时无法给列表赋值 len(s)#列表长 s+s s*5#l列表重复5次 5 in s#判断元素是否在列表中,返回true or false max(s ...

  9. HashMap其实就那么一回事儿之源码浅析

    上篇文章<LinkedList其实就那么一回事儿之源码分析>介绍了LinkedList, 本次将为大家介绍HashMap. 在介绍HashMap之前,为了方便更清楚地理解源码,先大致说说H ...

  10. 转-Android仿微信气泡聊天界面设计

    微信的气泡聊天是仿iPhone自带短信而设计出来的,不过感觉还不错可以尝试一下仿着微信的气泡聊天做一个Demo,给大家分享一下!效果图如下: 气泡聊天最终要的是素材,要用到9.png文件的素材,这样气 ...