js 和 java 將時間倒計時顯示


 需求:用戶購買產品,創建了一個訂單,但是還么有支付,此時給用戶三十分鍾剩余支付時間,前台頁面做倒計時功能,時間到達時,更改訂單狀態 ,輸出的格式是:29:23

java 實現

package com.project.test;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.apache.commons.validator.Var;
import org.junit.Test;
import org.omg.CORBA.PRIVATE_MEMBER;

import com.sun.org.apache.xerces.internal.parsers.IntegratedParserConfiguration;

import IceInternal.Time;
import sun.util.logging.resources.logging;

/*
 * @author xiaoyi
 * @see 倒計時轉化工具類
 */
public class TimeConvert {
    
private final static Long DEFAULT_TIME=(long) (30*60*1000);  //超時時間
    
    
    /*
     * @see 將字符串轉化為時間格式
     */
    public static Date convertStrToDate(String strDate){
        Calendar calendar=Calendar.getInstance();
        if(strDate != null){
            String[] dateAndTime=strDate.split(" ");
            String[] dateStr=dateAndTime[0].split("-");
            String[] TimeStr=dateAndTime[1].split(":");
            calendar.set(Integer.parseInt(dateStr[0]), Integer.parseInt(dateStr[1])-1, Integer.parseInt(dateStr[2]),
                    Integer.parseInt(TimeStr[0]), Integer.parseInt(TimeStr[1]), Integer.parseInt(TimeStr[2]));
        }
        return calendar.getTime();
    }
    
    /*
     * 左邊添加0
     */
    public static String addLeftZero(Long tempNum){
        String num="00";
        if(tempNum<10){
            num="0"+tempNum;
        }else if(tempNum==0){
            num= "00";
        }else{
            num=""+tempNum;
        }
        
        return num;
    }
    
    /*
     * //將毫秒數轉化為倒計時 eg :29:30
     */
    public static String  formatDate(Long num){
        String tem="00:00";
        if(num>0){
            Long minute=num/60/1000;
            Long yushu=num%(60*1000);
            Long second=yushu/1000;
            tem= TimeConvert.addLeftZero(minute)+":"+TimeConvert.addLeftZero(second);
        }else{
            tem= "00:00";
        }
        return tem;
    }
    
    
    /*
     * 計算還剩多少時間
     */
    public String calculateTime(String initTime){
        String  remainTime="00:00"; //剩余時間
        if(initTime !=null){
        Date nowDate=new Date();
        Long timeLength=(long) (TimeConvert.convertStrToDate(initTime).getTime()+DEFAULT_TIME-nowDate.getTime()); //求當時間和下單時間的差(毫秒)
            remainTime=TimeConvert.formatDate(timeLength);
        }
        return remainTime; 
    }
    
    //測試
    public static void main(String[] args) {
        TimeConvert timeConvert=new TimeConvert();
        SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(new TimeConvert().calculateTime("2017-12-29 15:09:56"));
       } }

 

將后台的數據傳遞到jsp頁面,怎么做倒計時,代碼如下

 

var showTimeInterval;
$(function(){
    setTimeout(function(){
         if($(".needTime").length>0){
             liveTime.initData('${orderDetail.ORDERID}');
            //定時器,修改訂單剩余支付時間
            showTimeInterval=window.setInterval(
                    function(){
                        liveTime.remindTime($(".needTime").html(),".needTime",".title"); //將倒計時格式
                    },1000); //每一秒刷新一次
            } 
    },1000)
      
});

 創建一個js

livetime.js

/*計算訂單的剩余時間*/
var globeNowTime=new Date();
var oderId=null;
var liveTime={
        initData:function(orderIdArgs){
            oderId=orderIdArgs;
        },
        convertStrToDate:function(dateString) {  //將字符串時間轉化
            if (dateString) { //2017-12-01 13:12:15
                    var arg1 = dateString.split(" ");  //分割日期和時分秒 
                    var arg2 = arg1[0].split('-'); 
                    var arg3=  arg1[1].split(':');
                    var date = new Date(arg2[0], arg2[1]-1, arg2[2],arg3[0],arg3[1],arg3[2]);  //分別對應 年 月 日 時 分 秒
                    return date;
                            } 
            },
            addLeftZero:function(tempNum){  //兩位數,左邊補0
                if(tempNum<10){
                    return "0"+tempNum;
                }else if(tempNum==0){
                    return "00";
                }else{
                    return tempNum;
                }
            },
            formatDate:function(num){  //將毫秒數轉化為倒計時 eg :29:30
                if(num>0){
                    var minute=parseInt(num/60/1000);
                    var yushu=num%(60*1000);
                    var second=parseInt(yushu/1000);
                    return liveTime.addLeftZero(minute)+":"+liveTime.addLeftZero(second);
                }else{
                    return "00:00";
                }
            },
            updateOrderInfo:function(){  //更新數據庫訂單狀態
                var url = "/core/recordExplain.updLiveOrderState.do";
                var postData={"orderId":oderId};
                $.getMyJSON(url,postData,function(data){
                    console.info("更新成功");
                });
            },
        globeCalculateTime:function(initTime){  //列表調用此方法    e 傳入this
            var remainTime="00:00"; //剩余時間
            var timeLength=globeNowTime.getTime()-liveTime.convertStrToDate(initTime).getTime(); //求當時間和下單時間的差(毫秒)
                remainTime=liveTime.formatDate(timeLength);
            return remainTime;  
            },
        calculateTime:function(initTime){  //定時器調用此方法
            var remainTime="00:00"; //剩余時間
            var nowDate=new Date();
            var timeLength=nowDate.getTime()-liveTime.convertStrToDate(initTime).getTime(); //求當時間和下單時間的差(毫秒)
                remainTime=liveTime.formatDate(timeLength);
            return remainTime; 
        },
        remindTime:function(getTime,className,className2){  //剩余時間倒計時
            var tt="00:00";
            if(getTime != null){
                var tempTime=getTime.split(":");
                var timeLength=parseInt(tempTime[0])*60*1000+parseInt(tempTime[1])*1000-1000;
                if(timeLength<1000){  //當訂單剩余時間小於1 秒的時候,開始更新數據庫的訂單狀態
                    //TODO something
                    liveTime.updateOrderInfo();  //更新數據
                    //並且將定時器關閉
                    clearInterval(showTimeInterval); 
                    //修改名稱
                    $(""+className2).html("訂單失效");
                }else{
                    tt=liveTime.formatDate(timeLength);
                }
                
            }
            
            $(""+className).html(tt);
        }
        
        
}

 

    屏幕已經開始倒計時

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM