//格式化日期为年4位,月日时分秒为2位的格式
function formateDate(year,month,day,hour,minute,second){
if(month<9)month="0"+month;
if(day<9) day="0"+day;
if(hour<9)hour="0"+hour;
if(minute<9)minute="0"+minute;
if(second<9)second="0"+second;
return year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second;
}
//函数调用说明
//date 格式为2011-08-09 19:21:00,每位数字两个字符,如果是单数,则必须前面加0;
//field 取值second minute hour day month year
//n 取值second(-60~60) minute(-60~60) hour(-24~24) day(-31~30) month(-12~12) year(无穷小~无穷大)以上取值区间均不含头尾值。
function showdate(date,field,n){//date为基数时间格式2011-08-09 19:21:00,n为秒,可正数也可负数
var date = date.split(' ');
var time = date[1].split(':');//时间19:21:00
var date = date[0].split('-');//日期2011-08-09
var v_second = parseFloat(time[2]);
var v_minute = parseFloat(time[1]);
var v_hour = parseFloat(time[0]);
var v_day = parseFloat(date[2]);
var v_month = parseFloat(date[1]);
var v_year = parseFloat(date[0]);
if(field=='second'){
if(n>=60)return '';
if(n<-60)return '';
v_second = v_second+n;
if(v_second>=0&&v_second<60){ // 0=<x<60
return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
}else if(v_second>-60&&v_second<0){// -60<x<0
v_second = 60+v_second;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'minute',-1);
}else{//因为 控制了n只能在-60到60之间取值(不含首尾),所以上面两个判断之后只剩下了 60=<x<120的可能了
v_second = v_second-60;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'minute',1);
}
}else if(field=='minute'){
if(n>60)return '';
if(n<-60)return '';
v_minute = v_minute+n;
if(v_minute<60&&v_minute>=0){// 0=<x<60
return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
}else if(v_minute<0&&v_minute>-60){// -60<x<0
v_minute = v_minute+60;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'hour',-1);
}else{// 60=<x<120
v_minute = v_minute-60;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'hour',1);
}
}else if(field=='hour'){
if(n>24)return '';
if(n<-24)return '';
v_hour = v_hour+n;
if(v_hour>=0&&v_hour<24){// 0=<x<24
return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
}else if(v_hour>-24&&v_hour<0){// <-24x<0
v_hour = v_hour+24;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'day',-1);
}else{// 24=<x<48
v_hour = v_hour -24;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'day',1);
}
}else if(field=='day'){
if(n>31) return '';
if(n<-31)return '' ;
v_day = v_day+n;
var flag = false;//平润年标致 true表示是闰年
if(v_year%4==0&&v_year%100!=0||v_year%400==0)flag=true;
if(v_month==2){
if(flag){//2月闰年
if(v_day<=29&&v_day>0){ //0<x<=29&&闰年&&2月份
return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
}else if(v_day>-29&&v_day<=0){// -29<x<=0&&闰年&&2月份
v_day = v_day + 31;//本月是二月份,向前一个月份借一个月,借的是一月份,一月份有31天
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'month',-1);
}else{// 29<x<(29+31)&&闰年&&2月份
v_day=v_day-29;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'month',1);
}
}else{//2月非闰年
if(v_day<=28&&v_day>0){//0=<x<=28&&平年&&2月
return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
}else if(v_day>-28&&v_day<=0){//-28<x<=0&&平年&&2月
v_day=v_day+31;//本月是二月份,向前一个月份借一个月,借的是一月份,一月份有31天
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'month',-1);
}else{//28<x<(28+31)&&平年&&2月
v_day=v_day-28;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'month',1);
}
}
}else if(v_month==1||v_month==3||v_month==5||v_month==7||v_month==8||v_month==10||v_month==12){//1 3 5 7 8 10 12月份都有31天
if(v_day<=31&&v_day>0){// 0<x<=31&& x in (1,3,5,7,8,10,12)
return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
}else if(v_day<=0&&v_day>-31){// -31<x<=0&& x in (1,3,5,7,8,10,12)
var marchFlag = false;
if(v_month==3&&flag){//当前月份是润年的3月,那向上一个月就只能借到29天
v_day=v_day+29;
marchFlag = true;
}else if(v_month==3&&!flag){//当前月份是平年的3月,那向上一个月就只能借到28天
v_day=v_day+28;
marchFlag = true;
}
if(marchFlag == true && v_day<=0){//如果借了2月的天数之后 还是小于0 ,那么要继续向上一个月,也就是一月借31天
v_day=v_day+31;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'month',-2);//借了2月份的 还要借1月份的
}else if(v_day<=0){
v_day=v_day+30;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'month',-1);
}else{
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'month',-1);
}
}else{// 31<x<(31+31)&& x in (1,3,5,7,8,10,12)
v_day=v_day-31;
if(v_day>28&&!flag&&v_month==1){//当前是平年的1月份,减去了31天后,还大于28天,二月份只有28天,也装不下,所以还要加一个月
v_day=v_day-28;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'month',2);
}else if(v_day>29&&flag&&v_month==1){//当前是润年的1月份,减去了31天后,还大于29天,二月份只有29天,也装不下,所以还要加一个月
v_day=v_day-29;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'month',2);
}else if(v_day>30&&v_month!=7){//减了31天后还大于30天,并且当前月份不是7月,那么还要加一个月。(因为非7月份的下一个月最多只有30天。)
v_day = v_day-30;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'month',2);
}else{
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'month',1);
}
}
}else{//非1 3 5 7 8 10 12月 非2月份 只有30天
if(v_day<=30&&v_day>0){// 0<x<=30 && x in(4,6,9,11)
return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
}else if(v_day>-31&&v_day<=0){// (1-31)<x<=0 && x in(4,6,9,11)
v_day=v_day+31;//当前月份的上一个月 无论如何都会是31天
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'month',-1);
}else{// 30<x<(30+31)
v_day=v_day-30;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'month',1);
}
}
}else if(field=='month'){
if(n>12)return '';
if(n<-12)return '';
v_month= v_month+n;
if(v_month<=12&& v_month>0){// 0<x<=12
return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
}else if(v_month>-12&&v_month<=0){// -12<x<=0
v_month=v_month+12;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'year',-1);
}else{// 12<x<24
v_month=v_month-12;
var temp = formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
return showdate(temp,'year',1);
}
}else if(field=='year'){
v_year =v_year+n;
//以下代码处理类似 2010-02-29 12:12:12加一年后变成2011-02-29 12:12:12的情况,2011年并不是闰年,所以没有29号
var flag = false;//平润年标致 true表示是闰年
if(v_year%4==0&&v_year%100!=0||v_year%400==0)flag=true;
if(v_month==2&&v_day==28&&flag)v_day=29;
return formateDate(v_year,v_month,v_day,v_hour,v_minute,v_second);
}
}
function date1MinusDate2(date1,date2){
var date1 = date1.split(' ');
var time1 = date1[1].split(':');//时间19:21:00
var date1 = date1[0].split('-');//日期2011-08-09
var second1 = parseFloat(time1[2]);
var minute1 = parseFloat(time1[1]);
var hour1 = parseFloat(time1[0]);
var day1 = parseFloat(date1[2]);
var month1 = parseFloat(date1[1])-1;
var year1 = parseFloat(date1[0]);
debugger;
var date2 = date2.split(' ');
var time2 = date2[1].split(':');//时间19:21:00
var date2 = date2[0].split('-');//日期2011-08-09
var second2 = parseFloat(time2[2]);
var minute2 = parseFloat(time2[1]);
var hour2 = parseFloat(time2[0]);
var day2 = parseFloat(date2[2]);
var month2 = parseFloat(date2[1])-1;
var year2 = parseFloat(date2[0]);
var d1 = new Date(year1,month1,day1,hour1,minute1,second1);
var d2 = new Date(year2,month2,day2,hour2,minute2,second2);
var result = (d1.getTime()-d2.getTime())/(24*60*60*1000)
return result;
}
分享到:
相关推荐
这个功能允许用户通过拖动时间标尺来快速定位到视频的任意时间点,提升了用户体验。 时间标尺(timeRuler)是视频播放器中一个重要的组件,它通常显示在视频下方,用于展示视频的持续时间,并以时间单位(如秒或分钟...
虽然描述部分重复了“js计算时间差”这一短语,但从上下文中我们可以理解到,这段描述旨在强调文章的主题是关于如何用JavaScript来计算两个时间点之间的时间差。 ### 标签:“js 时间差 时间差 时间差” 标签...
本文实例讲述了JS获取本周周一,周末及获取任意时间的周一周末功能。分享给大家供大家参考,具体如下: 项目需要获取本周及任意一天的周一及周末 需格式化,示例代码如下: <!DOCTYPE ...
通过这项工具,我们可以节省时间和精力,提高工作效率和效率。 在实际应用中,JS脚本注入可以应用于各种网页自动化操作,例如,自动填写表单、自动点击按钮、自动下载文件等。通过使用JS脚本注入,我们可以自动化...
这个`timeToDate.js`文件提供了一个重载函数,用于在时间戳和时间格式之间进行灵活转换。这种功能对于处理日期和时间的前端应用尤其有用,比如在用户界面中展示或接收时间数据。 函数接受一到两个参数,根据参数...
在处理日期和时间部分,JavaScript的Date对象是核心,通过其提供的方法可以进行日期的比较、加减和格式化。 ACustomDateTimePicker可能还包含了一些优化策略,例如缓存已选择的日期,以提高性能,尤其是在大量数据...
本文将详细介绍如何使用JavaScript来获取video元素在任意时间点的画面截图。 首先,要实现此功能,需要使用HTML5的video元素来展示视频,以及canvas元素来绘制截图。这里以HTML5 canvas技术为基础,利用它的2D渲染...
Leaflet.timeline, 在带有时间轴 slider 和播放按钮的地图上,显示任意 GeoJSON Leaflet.timeline-1.2.1随着时间的推移,显示随时间变化的地理空间数据,从点到多边形。如果你想从点到点平滑运动,这不是你的插件。 ...
标题 "时间闹钟 JS做的 源码" 提供了我们今天要探讨的主题:一个用JavaScript编写的在线时间闹钟。JavaScript是一种广泛用于网页开发的编程语言,它允许开发者在用户浏览器端执行代码,实现丰富的交互功能,如动态...
Moment.js 是一个简单易用的轻量级JavaScript日期处理类库,提供了日期格式化、日期解析等功能。它支持在浏览器和NodeJS两种环境中运行。此类库能够将给定的任意日期转换成多种不同的格式,具有强大的日期计算功能,...
在本压缩包中,"javascript制作js逐帧动画.zip" 提供了关于如何使用JavaScript实现逐帧动画的知识。 逐帧动画是一种将连续的静态图像按照一定顺序播放,从而创造出类似电影效果的技术。在JavaScript中,我们可以...
JavaScript中的Date对象提供了许多用于获取和设置日期和时间的方法。例如,Date()构造函数用于创建日期对象,而getDate()、getDay()、getMonth()、getYear()、getHours()、getMinutes()和getSeconds()等方法则可以...
倒计时JS源码 10分钟倒计时【可任意修改】 请支持原创!
【Flash倒计时【可任意设置时间】.ppt】是一个基于Adobe Flash技术的演示文稿,主要用于创建具有自定义时间设定的倒计时效果。在各类活动、会议、演讲、教学场景中,这样的倒计时工具能有效地管理时间,提醒参与者...
在本案例中,"javascript经典特效---图片的任意方向移动.rar"是一个关于使用JavaScript实现图片动态移动效果的教学资源。这个压缩包包含了一个名为"图片的任意方向移动.htm"的文件,很可能是HTML页面,用于展示和...
在本案例"javascript经典特效---文字段任意移动.rar"中,我们关注的是如何利用JavaScript来实现文字在页面上的动态移动效果,这通常涉及到DOM操作、时间函数以及CSS样式变换。 首先,要实现文字的移动,我们需要...
总结来说,这个JavaScript特效利用了`Date`对象获取当前时间,`setInterval`定时更新,以及CSS定位技术来实现在网页上任意位置显示的动态时钟。通过深入理解这些核心概念,你可以自由地调整和扩展这个效果,比如添加...
在实际使用中,我们可以通过传递不同的参数来判断当前时间或者任意指定时间是否在某个时间段内。例如,`time_range("21:30","23:30","3:22")`将判断凌晨3点22分是否在晚上9点30分至晚上11点30分的时间段内,而`time_...
本案例中的"基于JS实现距离当前时间倒计时特效源码.zip"是一个使用JavaScript编写的代码库,它允许开发者在网页上创建一个显示距离特定日期倒计时的动态效果。这个效果常见于网站的活动预告或者倒计时钟等场景。 ...
【jQuery竖直线性时间轴代码】是一个基于JavaScript库jQuery的插件,名为timeliner.js。这个插件专为创建动态、互动的时间轴设计,它允许用户以直观的线性方式展示事件序列或项目进度。在网页设计和开发中,时间轴是...