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
随机推荐
- MFC编程入门之十六(对话框:消息对话框)
前面几节讲了属性页对话框,我们可以根据所讲内容方便的建立自己的属性页对话框.本节讲解Windows系统中最常用最简单的一类对话框--消息对话框. 我们在使用Windows系统的过程中经常会见到消息对话 ...
- datatables设置解析
条信息" "sSearch":"搜索" 基本的命令 aaSorting:参数是个数组 [[],[]]单独定义每一列的排序方式 aaSortingFi ...
- STL中的查找算法
STL中有很多算法,这些算法可以用到一个或多个STL容器(因为STL的一个设计思想是将算法和容器进行分离),也可以用到非容器序列比如数组中.众多算法中,查找算法是应用最为普遍的一类. 单个元素查找 1 ...
- MYSQL常见错误及其解决方式
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- python——初识socket
什么是socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链 ...
- java length属性 length()方法 size()方法
length是属性,一般用来说明数组的长度 length()是方法,针对字符串String说的,用来求数组中某个元素的字符串长度 String str={"adfasf",&quo ...
- 读javascript高级程序设计05-面向对象之创建对象
1.工厂模式 工厂模式是一种常用的创建对象的模式,可以使用以下函数封装创建对象的细节: function CreatePerson(name,age){ var p=new Object(); p.n ...
- H5页面左图右边文字如何布局
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- freemarker if elseif
FreeMarker模板 if, else, elseif 指令 : if, else, elseif 语法 <#if condition> ... <#elseif conditi ...
- iOS开发UI篇—Quartz2D简单使用(三)
iOS开发UI篇—Quartz2D简单使用(三) 一.通过slider控制圆的缩放 1.实现过程 新建一个项目,新建一个继承自UIview的类,并和storyboard中自定义的view进行关联. 界 ...