日期格式化的开发与代码编写(一)

日期格式化的开发与代码编写

js的日期格式化

js的日期格式化获取当前时间

jS与Java和Oracle的日期格式不匹配,js生成的日期月份前格式化带0。

方式一、

Date.prototype.format = function (format) { 
    var o = {  
        "M+": this.getMonth() + 1, // month  
        "d+": this.getDate(), // day  
        "h+": this.getHours(), // hour  
        "m+": this.getMinutes(), // minute  
        "s+": this.getSeconds(), // second  
        "q+": Math.floor((this.getMonth() + 3) / 3), // quarter  
        "S": this.getMilliseconds()  
        // millisecond  
    }; 
    if (/(y+)/.test(format))  
        format = format.replace(RegExp.$1, (this.getFullYear() + "")  
            .substr(4 - RegExp.$1.length));  
    for (var k in o)  
        if (new RegExp("(" + k + ")").test(format))  
            format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));  
    return format;  
}
var dt= new Date(data); 

return dt.format("yyyy-MM-dd hh:mm:ss");

方式二:yyyy-MM-dd hh:mm:ss

	Date.prototype.format = function(fmt) { 
	    var o = { 
	       "M+" : this.getMonth()+1,                 // 月份
	       "d+" : this.getDate(),                    // 日
	       "h+" : this.getHours(),                   // 小时
	       "m+" : this.getMinutes(),                 // 分
	       "s+" : this.getSeconds(),                 // 秒
	       "q+" : Math.floor((this.getMonth()+3)/3), // 季度
	       "S"  : this.getMilliseconds()             // 毫秒
	   }; 
	   if(/(y+)/.test(fmt)) {
	           fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); 
	   }
	    for(var k in o) {
	       if(new RegExp("("+ k +")").test(fmt)){
	            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
	        }
	    }
	   return fmt; 
	}  

	var time = new Date().format("yyyy-MM-dd hh:mm:ss");

	$("#trbrqs").val(time);

	$('#trbrqs').attr("readonly","readonly");

方式三:yyyyMMdd

		function getNowFormatDate() 
        { 
           var day = new Date(); 
           var Year = 0; 
           var Month = 0; 
           var Day = 0; 
           var CurrentDate = ""; 
           Year       = day.getFullYear();//ie火狐下都可以 
           Month      = day.getMonth()+1; 
           Day        = day.getDate(); 
           CurrentDate += Year + ""; 
           if (Month >= 10 ) 
           { 
            CurrentDate += Month + ""; 
           } 
           else
           { 
            CurrentDate += "0" + Month + ""; 
           } 
           if (Day >= 10 ) 
           { 
            CurrentDate += Day ; 
           } 
           else
           { 
            CurrentDate += "0" + Day ; 
           } 

           return CurrentDate; 
        } 

      var namesalt = getNowFormatDate();

js的日期对象

在javascript中日期也是它的内置对象,所以我们要对日期进行获取和操作,必须实例化对象。

1.创建日期对象
  var dateobj=new Date();
  将会包含本地时间的信息,包括年月日时分秒 星期 

扫描二维码关注公众号,回复: 10470239 查看本文章

  注意:月份和星期都是从0开始计算的

2.获取日期方法

Date() 返回当日的日期和时间。 
getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。 
getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。
getMonth() 从 Date 对象返回月份 (0 ~ 11)。 
getFullYear() 从 Date 对象以四位数字返回年份。
getYear() 请使用 getFullYear() 方法代替。
getHours() 返回 Date 对象的小时 (0 ~ 23)。
getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。
getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。
getTime() 返回 1970 年 1 月 1 日至今的毫秒数。
getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。 

3.设置日期的方法

setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。
setMonth() 设置 Date 对象中月份 (0 ~ 11)。
setFullYear() 设置 Date 对象中的年份(四位数字)。 
setYear() 请使用 setFullYear() 方法代替。 
setHours() 设置 Date 对象中的小时 (0 ~ 23)。 
setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。
setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。 
setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。 
setTime() 以毫秒设置 Date 对象。
setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。 
setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。 
setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。 
setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。
setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。
setUTCSeconds() 根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。 
setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。 
<script type="text/javascript">
	var date=new Date();
	document.write(date.getTime()+"<br/>");
	document.write(date.getFullYear()+"<br/>");
	document.write((date.getMonth()+1)+"<br/>");
	document.write(date.getDate()+"<br/>");
	var today=date.getFullYear()+"年"+(date.getMonth()+1)+"月"+date.getDate()+"日";
	document.write(today+"<br/>");
	document.write(date.getHours()+"<br/>");
	document.write(date.getMinutes()+"<br/>");
	document.write(date.getSeconds()+"<br/>");
	today=date.getFullYear()+"年"+(date.getMonth()+1)+"月"+date.getDate()+"日  "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
	document.write(today+"<br/>");
	var day=date.getDay();
	var week;
	switch(day){
	case 0:week="星期日";break;
	case 1:week="星期一";break;
	case 2:week="星期二";break;
	case 3:week="星期三";break;
	case 4:week="星期四";break;
	case 5:week="星期五";break;
	case 6:week="星期六";break;
	}
	document.write(week+"<br/>");
	today=date.getFullYear()+"年"+(date.getMonth()+1)+"月"+date.getDate()+"日  "+week+" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
	document.write(today+"<br/>");
</script>

js计算当月的第一天与最后一天

$(function() {
     var nowdays = new Date();  
     var year = nowdays.getFullYear();
     var month = nowdays.getMonth()+1;
     if(month==0)
     {
         month=12;
         year=year-1;
     }
     if (month < 10) {
         month = "0" + month;
     }
     
     var firstDay = year + "-" + month + "-" + "01";
     var myDate = new Date(year, month, 0);
     var lastDay = year + "-" + month + "-" + myDate.getDate();
 
     var start = $("#ks").val(firstDay)
     var end = $("#js").val(lastDay);

  ));  

倒计时显示时间

function getcha (now,end) {
   var arr=[];
	var cha=(end.getTime()-now.getTime())/1000;
	var days=parseInt(cha/(60*60*24));
	arr.push(days)
		cha%=(60*60*24);
	var hours=parseInt(cha/(60*60));
	arr.push(hours)
		cha%=60*60;
	var mints=parseInt(cha/60);
	arr.push(mints)
	var sends=cha%60;
	arr.push(sends)

	return arr;
	}

window.onload=function  () {
 var spans=document.getElementsByTagName("span");
    var end=new Date();
    end.setFullYear(2012);
	end.setMonth(7);
	end.setDate(12);
	end.setHours(12);
	end.setMinutes(0);
	end.setSeconds(0);
   var now=new Date();
     for (var i=0; i<getcha (now,end).length; i++) {
	   spans[i].innerHTML=getcha (now,end)[i]
     } 

  

   setInterval(function  () {
     var now=new Date();
     for (var i=0; i<getcha (now,end).length; i++) {
	   spans[i].innerHTML=getcha (now,end)[i]
     } 
   },1000)
}

<div>
距离奥运会还有<span></span>天<span></span>小时<span></span>分钟<span></span>秒
</div>

Oracle的日期格式化

oracle的日期格式化获取当前时间

oracle的日期格式定义

       Year:      
        yy two digits 两位年                显示值:07 
        yyy three digits 三位年                显示值:007 
        yyyy four digits 四位年                显示值:2007 
            
        Month:      
        mm    number     两位月              显示值:11 
        mon    abbreviated 字符集表示          显示值:11月,若是英文版,显示nov     
        month spelled out 字符集表示          显示值:11月,若是英文版,显示november 
          
        Day:      
        dd    number         当月第几天        显示值:02 
        ddd    number         当年第几天        显示值:02 
        dy    abbreviated 当周第几天简写    显示值:星期五,若是英文版,显示fri 
        day    spelled out   当周第几天全写    显示值:星期五,若是英文版,显示friday        
        ddspth spelled out, ordinal twelfth 
             
              Hour: 
              hh    two digits 12小时进制            显示值:01 
              hh24 two digits 24小时进制            显示值:13 
              
              Minute: 
              mi    two digits 60进制                显示值:45 
              
              Second: 
              ss    two digits 60进制                显示值:25 
              
              其它 
              Q     digit         季度                  显示值:4 
              WW    digit         当年第几周            显示值:44 
              W    digit          当月第几周            显示值:1 
              
        24小时格式下时间范围为: 0:00:00 - 23:59:59....      
        12小时格式下时间范围为: 1:00:00 - 12:59:59 .... 

通常日期格式都是以时间戳的形式存放在数据库里,当前端页面通过接口查询时,我们会将一个对象的某些属性查出来返回给页面。

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss" )

原因是:页面将数据传到后台,是以字符串的形式。所以时间格式会出错。加上此注解,后台可解析时间格式的字符串。但是后台传到前台,前台没办法解析。需要做如下操作。

@JsonFormat注解

                    <tr style="height: 50px">
                        <th style="width: 70px">拆除日期:</th>
                        <td style="width: 230px" colspan="3">
                            <input name="removeTime" class="easyui-my97" data-options="required:true" style="width: 200px;" >
                        </td>
                    </tr>
                        <td style="width: 200px" colspan="3">
                            <input name="approveTime" class="easyui-textbox" style="width: 170px;" >
                        </td>
@JsonFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date removeTime;//拆除日期
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date approveTime;//审批时间

oracle查找月的第一天,最后一天 

  SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month, 
       Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month, 
       Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month, 
       LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month 
   FROM dual; 

oracle计算一年前的日期

create or replace view v_rgq_one as
select "CODE","NAME","CUR_TIME","CUR_AMOUNT","VARIATION","LAST_TIME","LAST_AMOUNT" from (
select 
       cur_year.sj  as cur_time,
       cur_year.yql as cur_amount,
       cur_year.yql-last_year.yql as variation,
       last_year.sj    as last_time,
       last_year.yql  as last_amount
  from SMCOUNT cur_year left join sm_count last_year
  on cur_year.sj =
       to_char(add_months(to_date(last_year.sj, 'YYYY-MM-DD'), +12),
               'YYYY-MM-DD')
 order by cur_year.sj desc);

查看某张表一小时前的数据

select * from ct_user as of timestamp sysdate-(1/(24));

add_months(x,y)或者add_months(times,months)函数:计算多少个月以后的日期,如果后者为负数,则计算当前日期之前多少个月的日期。

select add_months(sysdate,-6) from dual;//查询的结果是当前时间半年前的时间
select add_months(sysdate,6) from dual;//查询的结果是当前时间半年后的时间
 select ename, hiredate from emp where hiredate <= add_months(sysdate, -288);//入职时间超过24年-288 = -24*12

last_day():返回指定日期所在月份的最后一天;

select last_day(sysdate) from dual;//查询当前月份的最后一天:
select last_day(to_date('1992-10-09','yyyy-mm-dd')) from dual;//查询某天所在月份的最后一天:

to_date()函数,将字符串转为日期

注意:SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟

另要以24小时的形式显示出来要用HH24

update t_date set d3=to_date('2016-12-20','YYYY-MM-DD') where id=1;

update t_date set d3=to_date('2016-12-20 18:31:34','YYYY-MM-DD HH24:MI:SS') where id=1;

两个日期间的天数      

    select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;   

补充;查找2002-02-28至2002-02-01间除星期一和七的天数  

  select count(*)      
   from ( select rownum-1 rnum      
       from all_objects      
       where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-      
       02-01','yyyy-mm-dd')+1      
      )      
   where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )      
        not in ( '1', '7' )      

months_between()函数返回两个日期之间的月份数。如果两个日期月份内天数相同,或者都是某个月的最后一天,返回一个整数,否则,返回数值带小数,以每天1/31月来计算月中剩余天数。如果日期1日期2小 ,返回值为负数。

months_between(to_date('1999.11.29','yyyy.mm.dd'), to_date('1998.11.29','yyyy.mm.dd')) 

返回  12

注:两个参数均为同样月份的29号,所以返回一整数。

 
 months_between(to_date('1999.11.29','yyyy.mm.dd'), to_date('1998.12.24','yyyy.mm.dd'))

 返回   13.16129

如果两个时间的日期不同,他就算出日期差都除以31,结果就一堆小数。

    select months_between(to_date('01-31-2008','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;      
    1      
   select months_between(to_date('02-01-2008','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;      
    1.03225806451613 

定义函数处理月份差

create or replace function fun_month_num (var_begin_date in varchar2,var_end_date in varchar2)  
return number  
as
    is_begin_date date;  
    is_end_date date;  
    is_count number(10);  
    i number(10);  
    j number(10);  
    is_this_date date;  
begin  
    is_begin_date := to_date(var_begin_date,'yyyy-mm-dd');  
    is_end_date := to_date(var_end_date,'yyyy-mm-dd');    
    is_this_date := last_day(is_end_date) ;    
    is_count := 0 ;  
   
    loop  
    exit when is_this_date < last_day(is_begin_date)+1 ;  
        is_count := is_count+1;                        
        is_this_date := last_day(is_this_date)-32;  

    end loop;  

    return is_count;  
end;

使用

select fun_month_num('2008-09-30','2008-02-01') from dual; 

next_day()

NEXT_DAY(date,char) date参数为日期型

 返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日 
   1 2 3 4 5 6 7      
   日 一 二 三 四 五 六  

 next_day(sysdate,6)是从当前开始下一个星期五。
后面的数字是从星期日开始算起。    
select next_day(to_date('2014-4-1','yyyy-MM-dd'),'星期三') from dual;

从特定日期得到之后的第一个星期三的日期。

select next_day( sysdate, 'MONDAY') from dual;
可以求出当前日期的下个星期一。

next_day(to_date('1999.11.24','yyyy.mm.dd'),'friday')      
// 返回   1999年11月26日
//1999年11月24日是星期三,第二个参数是星期五,是两天后。

to_char()日期格式转换

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;   //日期转化为字符串   
select to_char(sysdate,'yyyy') as nowYear   from dual;   //获取时间的年   
select to_char(sysdate,'mm')    as nowMonth from dual;   //获取时间的月   
select to_char(sysdate,'dd')    as nowDay    from dual;   //获取时间的日   
select to_char(sysdate,'hh24') as nowHour   from dual;   //获取时间的时   
select to_char(sysdate,'mi')    as nowMinute from dual;   //获取时间的分   
select to_char(sysdate,'ss')    as nowSecond from dual;   //获取时间的秒 

获取小时数对比

  select sysdate ,to_char(sysdate,'hh') from dual;   
  //2003-10-13 19:35:21 07 
  select sysdate ,to_char(sysdate,'hh24') from dual;  
  //2003-10-13 19:35:21 19 

trunc()函数处理日期

    语法格式:TRUNC(date[,fmt])

  其中:date 一个日期值;fmt 日期格式。

    该日期将按指定的日期格式截取;忽略它则由最近的日期截取。

 select trunc(sysdate) from dual;--2017/2/13,返回当前时间
   select trunc(sysdate,'yy') from dual;--2017/1/1,返回当年第一天
   select trunc(sysdate,'mm') from dual;--2017/2/1,返回当月的第一天
   select trunc(sysdate,'d') from dual;--2017/2/12,返回当前星期的第一天,即星期天
   select trunc(sysdate,'dd') from dual;--2017/2/13,返回当前日期,今天是2017/2/13
   select trunc(sysdate ,'HH24') from dual;--2017/2/13 15:00:00,返回本小时的开始时间
   select trunc(sysdate ,'MI') from dual;--2017/2/13 15:13:00,返回本分钟的开始时间

   trunc(sysdate,'year') YEAR,        //返回当前年的1月1日,无时分秒 
   trunc(sysdate,'month') MONTH ,     //返回当前月的1日,无时分秒 
   trunc(sysdate,'day') DAY           //返回当前星期的星期天,无时分秒 

对number类型则截取小数,截取时并不对数据进行四舍五入。
    select trunc(123.567,2) from dual;--123.56,将小数点右边指定位数后面的截去;
    select trunc(123.567,-2) from dual;--100,第二个参数可以为负数,表示将小数点左边指定位数后面的部分截去,即均以0记;
    select trunc(123.567) from dual;--123,默认截去小数点后面的部分;

extract()函数用于从date类型或interval类型中截取到特定的部分;

select extract(year from sysdate) from dual;
select extract(month from sysdate) from dual;
select extract(day from sysdate) from dual;
select extract(Hour from systimestamp) from dual;
select extract(minute from systimestamp) from dual;
select extract(second from systimestamp) from dual;
select extract(timezone_hour from systimestamp) th from dual;
select extract(timezone_minute from systimestamp) tm from dual;
select extract(timezone_region from systimestamp) tr from dual;
select extract(timezone_abbr from systimestamp) ta from dual;

两个日期之间的具体时间间隔,可以用extract()函数;

select extract(day from dt2-dt1) day
,extract(hour from dt2-dt1) hour
,extract(minute from dt2-dt1) minute
,extract(second from dt2-dt1) second
from
( select to_timestamp('2013-02-04 15:07:00','yyyy-mm-dd hh24:mi:ss') dt1,to_timestamp('2013-11-30 22:08:46', 'yyyy-mm-dd hh24:mi:ss') dt2 from dual
);

round[舍入到最接近的日期](day:舍入到最接近的星期日) 。与trunc不同的是,trunc()不进行四舍五入操作,只截取

   select sysdate S1, 
   round(sysdate) S2 , 
   round(sysdate,'year') YEAR, 
   round(sysdate,'month') MONTH , 
   round(sysdate,'day') DAY from dual

greatest返回日期列表中最晚日期

 select greatest('01-1月-04','04-1月-04','10-2月-04') from dual

oracle日期换算

oracle计算小时,分,秒,毫秒      

    select      
     Days,      
     A,      
     TRUNC(A*24) Hours,      
     TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,      
     TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,      
     TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds      
    from      
    (      
     select      
     trunc(sysdate) Days,      
     sysdate - trunc(sysdate) A      
     from dual      
   )    

oracle日期计算换算

  floor((date2-date1) /365) 作为年      
   floor((date2-date1, 365) /30) 作为月      
   d(mod(date2-date1, 365), 30)作为日.
当前时间减去7分钟的时间 
select sysdate,sysdate - interval ’7’ MINUTE from dual 
当前时间减去7小时的时间 
select sysdate - interval ’7’ hour from dual 
当前时间减去7天的时间 
select sysdate - interval ’7’ day from dual 
当前时间减去7月的时间 
select sysdate,sysdate - interval ’7’ month from dual 
当前时间减去7年的时间 
select sysdate,sysdate - interval ’7’ year from dual 
时间间隔乘以一个数字 
select sysdate,sysdate - 8 *interval ’2’ hour from dual

日期天换算为秒

select (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from dual 
发布了370 篇原创文章 · 获赞 88 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/100117567