关于java和javascript交互中的日期处理问题汇总

javascript部分
分两种情况:
—-后台接收long型
——–js处理


(new Date()).getTime()//Date转long,默认new Date()可以把当前日期时间精确到秒
输出结果:1455862677881//即2016/2/19 14:17:57

long转date
var unixtime = new Date(1446810976000);
输出结果:Fri Nov 06 2015 19:56:16 GMT+0800 (中国标准时间)

获取n天后的日期
var self=this;//这里的this是我的那个页面dom,里面包含各种方法
var curDate=self.formatDate(new Date(),'yyyy-MM-dd');//格式化日期工具方法在下面有提供
var afterDate= self.formatDate(new Date().getTime()+ 30*24*60*60*1000,'yyyy-MM-dd');//30天后
console.log(curDate);//2015-02-22
console.log(afterDate);//2015-03-23

var timestamp =Date.parse(new Date(afterDate));
console.log(timestamp);//取出当前时间戳
输出结果:1455860246000//unix时间戳,到网站上面转码需要去除最后面**000**如下图


----------


input的输入框是date类型,只能精确到日期--时间自己ping
var today=new Date();
var h=today.getHours();
var m=today.getMinutes();
var s=today.getSeconds();
console.log(h+":"+m+":"+s);
输出结果:13:51:29



html5的input输入框的type datetime-local(精确到了时:分)
如下图<input  type="datetime-local">
需要自己处理,为啥?请看下面控制台输出
var a=$0;
console.log(avalue);
输出结果:2016-02-12T12:23


----------


//因为多了个T。这个不知道是不是H5的bug,我是无法理解了,于是传入后台之前需要处理一下,我写了个replace方法。
this.entity.publishDate = self.changeDateT(this.entity.publishDate)+":00";//这里面不加00的话转化成long型的时候也是会默认加00,下面说明
new Date(2016-02-12 12:23).getTime()=new Date(2016-02-12 12:23:00).getTime();
changeDateT:function(date){
            return date.replace("T"," ");
        }
附上格式化日期的方法


----------


 /**
         * 格式化日期
         */
        formatDate:function(date,fmt){
            date = date || new Date().getTime();
            fmt=fmt||'yyyy-MM-dd HH:mm:ss';
            date = new Date(Number(date));
            var  o  =   {
                "M+" :  date.getMonth()  +  1, // 月份   
                "d+" :  date.getDate(), // 日  
                "H+" :  date.getHours(), // 小时   
                "m+" :  date.getMinutes(), // 分   
                "s+" :  date.getSeconds(), // 秒    
                "q+" :  Math.floor((date.getMonth()  +  3)  /  3), // 季度   
                "S" :  date.getMilliseconds()   // 毫秒   
            };
            if  (/(y+)/.test(fmt))  {
                fmt  =  fmt.replace(RegExp.$1,   (date.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;
        },



----------


到此前端各种日期时间传入后台之前的处理基本完成。


----------

这里写图片描述

这里写图片描述
这里写图片描述

—-java部分接收Date
—-后端是springmvc的javabean接收数据
——–后端javabean中的处理


long型
    private long invoiceCreatedAt;
Date型
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDateStart;//case1
    private String startTime;//case2
    private Date paymentTime; //交易时间case3
关于DateTimeFormat
**是springmvc的一种注入有兴趣的可以百度下**
下面是查询的时候需要对日期进行处理的一个例子
//缺省查询时间范围是当前日期的前一个月

这里param.getSatetTime是String类型
容易出错的地方是查询应该从00:00:0024:00:00

if (!StringHelper.isAnyEmpty(param.getStartTime())) {
    queryParams.put("startTime", DateHelper.convertToStr("yyyy-MM-dd 00:00:00", new Date(new Long(param.getStartTime()))));
} else {
    queryParams.put("startTime", DateHelper.convertToStr("yyyy-MM-dd HH:mm:ss", DateHelper.getAfterDate(new Date(), -30)));
}
if (!StringHelper.isAnyEmpty(param.getEndTime())) {
    queryParams.put("endTime", DateHelper.convertToStr("yyyy-MM-dd 24:00:00", new Date(new Long(param.getEndTime()))));
} else {
    queryParams.put("endTime", DateHelper.convertToStr("yyyy-MM-dd HH:mm:ss", DateHelper.getAfterDate(new Date(), 1)));
}


情况2:
直接给javabean中的data型属性赋值
     DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        project.setPstartDate(df.parse(
                DateHelper.convertToStr("yyyy-MM-dd HH:mm:ss", DateHelper.getAfterDate(new Date(), 1))));//竞标日期
        project.setPfullDate(df.parse(
                DateHelper.convertToStr("yyyy-MM-dd HH:mm:ss", DateHelper.getAfterDate(new Date(), 2))));//满标日期*/
        project.setPvalueDate(DateHelper.getAfterDate(new Date(), 3));//起息日期
        project.setPendDate(df.parse(
                DateHelper.convertToStr("yyyy-MM-dd HH:mm:ss", DateHelper.getAfterDate(new Date(), 30))));//回款日期
        project.setPrealendDate(df.parse(
                DateHelper.convertToStr("yyyy-MM-dd HH:mm:ss", DateHelper.getAfterDate(new Date(), -30))));;//实际回款日期
        project.setOverDate(df.parse(
                DateHelper.convertToStr("yyyy-MM-dd HH:mm:ss", DateHelper.getAfterDate(new Date(), 47))));//项目结束日期;
        project.setRemark("测试数据");
附上工具类
    /**
     * @param currentDate 当前日期
     * @param interval 跳跃的天数,负数向前跳,正数向后跳
     * @return
     */
    public static Date getAfterDate(Date currentDate,int interval){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(currentDate);
        calendar.add(Calendar.DATE, interval);
        Date temp = new Date(calendar.getTimeInMillis());
        Date result = parse(dateFormat(temp, YYMMDD), YYMMDD);
        return result;
    }
 /**
     * 把当前时间转换成目标字符格式串
     *
     * @param pattern
     *            格式
     * @param date
     *            需要转换的日期
     * @return
     */
    public static String convertToStr(String pattern, Date date) {
        SimpleDateFormat format = new SimpleDateFormat(pattern);

        return format.format(date);
    }
传入scala的话java与scala的bean匹配有下


----------


java:
public aJava(
            RequestHeader requestHeader, PageRequest pageRequest,
            Map<String, String> queryParams)
scala:
class aScala(requestHeader: RequestHeader, pageRequest: PageRequest, queryParams: java.util.Map[String, String]) extends OrderDbcActionHandler[ReceiptAccounts, ReceiptLineQueryResponse](requestHeader, null) {


----------

日期处理到此前后端交互处理完成,其他的遗漏或者补充的日后会跟进的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值