js 日期按年月日加减
<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 日期按年月日加减的更多相关文章
- js实现输入框数量加减【转】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js实现购买数量加减效果
写在前面:当我们需要在多个页面都有操作数量的需求时的一种解决方案 结构: js代码: <script type="text/javascript"> function ...
- shell日期格式化、加减运算
#!/bin/bash echo i love you输出:i love you =======================================反引号的作用============== ...
- js 时间格式,加减
Date.prototype.Format = function (fmt) { //author: rixiao var o = { "M+": this.getMonth() ...
- Java 日期工具类(日期,月份加减等)--转
package util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.C ...
- 日期类的加减及java中所以日期类的操作算法大全
1.计算某一月份的最大天数 1Calendar time=Calendar.getInstance();2time.clear();3time.set(Calendar.YEAR,year); //y ...
- js 购物车的数量加减,对应的总价也随机变化
html相关的源码: <div class="goods_num clearfix"> <div class="num_name fl"> ...
- js 时间格式化 -- 时间加减实现
时间格式化的方法: Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.ge ...
- MYSQL日期类型的加减更新使用INTERVAL 1 DAY
例如:UPDATE teachingplan SET teachPlanBeginTime = teachPlanBeginTime +INTERVAL 1 DAY
随机推荐
- jQuery ------------> 验证表单
简单的东西重复做,做多了之后,才能说熟能生巧. 做好一个精美的页面,固然是好,但是,一个页面除了写好之外,我们更需要的是将其功能完善.比如表单的验证,这只是众多工作之一.然后本次就以jQuery的va ...
- STM32学习笔记(五) USART异步串行口输入输出(轮询模式)
学习是一个简单的过程,只要有善于发掘的眼睛,总能学到新知识,然而如何坚持不懈的学习却很困难,对我亦如此,生活中有太多的诱惑,最后只想说一句勿忘初心.闲话不多扯,本篇讲诉的是异步串行口的输入输出,串口在 ...
- HBase之计数器
HBase计数器 #创建counters表 列族['daily','weekly','monthly'] hbase(main):001:0> create 'counters','daily' ...
- KindEditor4.1.10,支持粘贴图片(转载!)
本人扩展了KindEditor4.1.10,使得他能够在Chrome和IE11中直接粘贴复制的图片(比如通过截图工具把图片直接保存在剪切板中),然后调用上传URL上传图片 方法,修改kindedito ...
- 【nginx】利用yum源安装nginx
先安装nginx的yum源 http://nginx.org/en/linux_packages.html#stable 找到链接,安装: rpm -ivh http://nginx.org/pack ...
- SQL Server 用户名密码查看
因为SQL Server是默认使用Windows身份验证的,很多时间就会慢慢忘记掉原来设置的密码,那么怎么重新设置用户名密码呢 这里以SQL Server2013为例,先以windows身份验证登陆进 ...
- bugfree安装
1.下载xampp文件:xampp-linux-x64-5.5.30-3-installer.run 2.安装此文件,用root账号安装,安装命令:./xampp-linux-x64-5.5.30-3 ...
- 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 ...
- HashMap其实就那么一回事儿之源码浅析
上篇文章<LinkedList其实就那么一回事儿之源码分析>介绍了LinkedList, 本次将为大家介绍HashMap. 在介绍HashMap之前,为了方便更清楚地理解源码,先大致说说H ...
- 转-Android仿微信气泡聊天界面设计
微信的气泡聊天是仿iPhone自带短信而设计出来的,不过感觉还不错可以尝试一下仿着微信的气泡聊天做一个Demo,给大家分享一下!效果图如下: 气泡聊天最终要的是素材,要用到9.png文件的素材,这样气 ...