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
随机推荐
- window svn链接
我学会怎么建立window SVN服务器了 今天,终于学会怎么自己搭建SVN服务了,以前一直用的都是公司的SVN服务,没接触过,觉得很神秘,曾经我一个同事弄了好几天,也没搭成,对我打击挺大的:( 觉得 ...
- Page Visibility API(页面可见性)
页面可见性: 就是对于用户来说,页面是显示还是隐藏, 所谓显示的页面,就是我们正在看的页面:隐藏的页面,就是我们没有看的页面. 因为,我们一次可以打开好多标签页面来回切换着,始终只有一个页面在我们眼前 ...
- stm32cube--通用定时器--输入捕获
用定时器输入捕获做红外线接收实验.(此次试验以通道2为例) ①stm32cube配置 ② ③ ④程序中主要用到的输入捕获相关寄存器 uint16_t tim_sr,tim_ccer,tim_ccr; ...
- Skyfree的毕业论文 《系统封装与部署的深入研究》
Skyfree的毕业论文 <系统封装与部署的深入研究> https://www.itsk.com/thread-197-1-4.html Skyfree 发表于 2007-9-13 07: ...
- IntelliJ IDEA 设置代码提示或自动补全的快捷键
IntelliJ IDEA 设置代码提示或自动补全的快捷键 点击 文件菜单(File) –> 点击 设置(Settings- Ctrl+Alt+S), –> 打开设置对话框. 在左侧的 ...
- javascript new
1. 仅function可以使用new 2. function使用new时,会拷贝function中this的内容给新对象,并将function的prototype指向新对象(如果该function没 ...
- 随机抽奖 --java
使用Math.random() 1.Math.random() 返回double类型. /** * 随机得到获奖名单 * @param assocs * @param prizeNumber * @r ...
- iOS开发UI篇—UITableviewcell的性能优化和缓存机制
iOS开发UI篇—UITableviewcell的性能问题 一.UITableviewcell的一些介绍 UITableView的每一行都是一个UITableViewCell,通过dataSource ...
- BestCoder Round #40
T1:Tom and pape (hdu 5224) 题目大意: 给出一个矩形面积N,求周长的最小值.(长&&宽&&面积都是正整数) N<=109 题解: 没啥好 ...
- new对象时,类名后加括号与不加括号的区别
[1]默认构造函数 关于默认构造函数,请参见随笔<类中函数> 请看测试代码: 1 #include <iostream> 2 using namespace std; 3 4 ...