zoukankan      html  css  js  c++  java
  • 计算日期时间 自动加1天 PHP计算闰年 java与PHP时间戳对比区别

    昨天写一个同步数据库的模块  从一个数据库同步到另外一个数据库,因为数据较多,不可能一次性全部搬迁过去,所以就按照每天搬迁!

    写了一个 模块,点击加1,只要点击一次,自动从A数据库取出1天的数据, 并插入到B数据库,

    在代码中你可能看到 计算时间的时候用到了 时间戳,并且时间戳加了好多 ‘0’ 是因为那是sqlserver 是公司java同事写的,为了PHP计算的时间戳与之匹配,

    所以通过加‘0’之后  对比 时间戳取出一天的数据!

    这里顺便整理一下 java和PHP之间的时间戳的区别!

    java 时间戳和PHP时间戳 的转换 php time()
    总结一下java 时间戳和PHP时间戳 的转换问题:
    由于精度不同,导致长度不一致,直接转换错误。
    JAVA时间戳长度是13位,如:1294890876859
    PHP时间戳长度是10位, 如:1294890859
    
    主要最后三位的不同,JAVA时间戳在PHP中使用,去掉后三位,如:1294890876859-> 1294890876 结果:2011-01-13 11:54:36
    
        echo date('Y-m-d H:i:s','1294890876');
    
    复制代码
    PHP时间戳在JAVA中使用,最后加三位,用000补充,如:1294890859->1294890859000
    结果:2011-01-13 11:54:19
    
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateTime = df.format(1294890859000L);               
        System.out.println(df);
    
    复制代码
    
    总结一下java时间戳和PHP时间戳 的转换问题:
    由于精度不同,导致长度不一致,直接转换错误。
    JAVA时间戳长度是13位,如:1294890876859
    PHP时间戳长度是10位, 如:1294890859
    
    主要最后三位的不同,JAVA时间戳在PHP中使用,去掉后三位,如:1294890876859-> 1294890876 结果:2011-01-13 11:54:36
    echo date('Y-m-d H:i:s','1294890876');
     
    
    PHP时间戳在JAVA中使用,最后加三位,用000补充,如:1294890859->1294890859000
    结果:2011-01-13 11:54:19
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String dateTime = df.format(1294890859000L);               
    System.out.println(df);

    下面整理下我自己写的代码!方便日后查阅,类是用CI写的!

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 14-12-23
     * Time: 下午4:27
     */
    
    class Sync extends My_Controller {
    
        /**
         * @var hr伴侣数据库的实例
         */
        private $hrdb;
    
        private $year ;
    
        private $month ;
    
        private $date ;
    
        private $month_31 = array(1,3,5,7,8,10,12);
    
        private $month_30 = array(4,6,9,11);
    
        private $startTimeStamp;
        private $recursionCount = 0;//递归计数
    
        public function __construct() {
            parent::__construct();
            header("Content-type:text/html;charset=utf-8");
            date_default_timezone_set('PRC');
            $this->load->model('sync_mdl');
            $this->hrdb = $this->sync_mdl->getSqlServer();
        }
    
        public function action() {
    
            $beginYear  = $this->input->post('beginYear');
            $beginMonth = $this->input->post('beginMonth');
            $beginDay   = $this->input->post('beginDay');
            $endYear    = $this->input->post('endYear');
            $endMonth   = $this->input->post('endMonth');
            $endDay     = $this->input->post('endDay');
    
    
           if( !empty($beginYear) && !empty($beginMonth) && !empty($beginDay) && empty($endYear) && empty($endMonth) && empty($endDay)) {
            //自定义开始同步时间,默认同步1天
               $this->year = $beginYear; $this->month = $beginMonth; $this->date = $beginDay;
               $this->startTimeStamp = $this->getTimeStamp($this->year, $this->month, $this->date);
    
               $result = $this->fetchOneDayData($this->startTimeStamp, $this->computeTime());
    
           } else if( !empty($beginYear) && !empty($beginMonth) && !empty($beginDay) && !empty($endYear) && !empty($endMonth) && !empty($endDay) ) {
               //自定义开始 结束的同步时间
               $endTimeStamp = $this->getTimeStamp($endYear, $endMonth, $endDay);
    
               $result = $this->fetchOneDayData( $this->startTimeStamp, $endTimeStamp );
    
           } else {
    
               echo '<p style="color:red">时间不能为空</p>';
    
           }
    
             //if(!empty( array('mobile')) ) {
                 //就用电话创建账号
             //} else if(email 不为空) {
                //就用邮箱创建账号
            //} else {
                //不做任何操作
            //}
    
                //如果数据不为空,判断mobile 或者 email 是否存在于小职了
    
                     //以上通过,便进行插入到小职了的数据库
    
           // echo $this->startTimeStamp; echo '<br/>';
            //echo $this->computeTime();
            //当前取值的数据;
    
            $data['year']  = $this->year;
            $data['month'] = $this->month;
            $data['day']   = $this->date;
        $this->load->view('sync', $data);
            echo '<pre/>';
            if( !empty($result) ) {
                print_r($result);
            } else if(isset($result) && $result == 'today') {
                echo '已经到今天了!';
            } else if( empty($rs) ) {
                echo '本日无数据可同步';
            }
        }
    
        /**取出一天的数据, 只要计算的当天数据为空,递归调用,直到当天有数据
         * @param $startTimeStamp   开始时间戳
         * @param $endTimeStamp     结束时间戳
         * @return mixed            返回一天的数据
         */
        private function fetchOneDayData($startTimeStamp, $endTimeStamp) {
    
            if($startTimeStamp == $endTimeStamp) {
    
                return 'today';
    
            } else {
    
                $rs = $this->fetchHrData($startTimeStamp, $endTimeStamp);
                if(empty($rs)) {
                    return array();
                } else if( !empty($rs) ) {
                    return $rs;
                }
    
    //            if(!empty($rs)) {
    //
    //               return $rs;
    //
    //            } else if(empty($rs)) {
    //                $this->recursionCount = $this->recursionCount + 1;
    //                $this->startTimeStamp = $endTimeStamp;
    //                if($this->recursionCount < 50) {
    //                    //echo '<strong>'.$this->recursionCount.'</strong>';
    //                    //如果数据不为空的时候,这里接收到本身调用自己返回的数组,并返回
    //                    $re = $this->fetchOneDayData($this->startTimeStamp, $this->computeTime());
    //                    return $re;
    //
    //                } else {
    //                    return '超过50天没有数据了';
    //                }
    
    //            }
            }//end else
        }
    
    
        /**根据时间取出每天数据
         * @param $beginTime
         * @param $endTime
         */
        private function fetchHrData($beginTime, $endTime) {
    
            $sql = "SELECT truename,pubdate FROM resume_cn WHERE pubdate >= $beginTime AND pubdate <= $endTime";
            $query = $this->hrdb->query($sql);
            $rs = $query->result_array();
            //echo '<pre/>';
            return $rs;
    //        print_r($rs);
        //$this->test($rs[9]['pubdate'])
        }
    
    
        /**计算年份是否是闰年,如果是闰年 2月份是29天  平年是28天, 每调用一次这个函数,天数增 加1天
         * @return string  时间戳,是经过计算的,前加 '00'  后加'000' ,为了与hr伴侣的时间戳相匹配
         */
        private function computeTime() {
            if (($this->year % 4 == 0 && $this->year % 100 != 0) || ($this->year % 400 == 0)) {
                $this->computeTimeDate(29);
                return $this->getTimeStamp($this->year, $this->month, $this->date);
            } else {
                $this->computeTimeDate(28);
                return $this->getTimeStamp($this->year, $this->month, $this->date);
            }
        }
    
        /**根据2月份是多少天,计算日期时间,
         * @param $Feb  2月的天数
         */
        private function computeTimeDate($Feb) {
    
            if ($this->month == 2) {
    
                if($this->date >= 1 && $this->date <= $Feb) {
                    $this->date = $this->date + 1;
                } else if($this->date > $Feb) {
                   $this->computeDateMonth();
                } else {
                    die('2月份天数不在正常范围内');
                }
    
            } else if( in_array($this->month, $this->month_30) ) {
    
                if( $this->date >= 1 && $this->date < 30 ) {
                    $this->date = $this->date + 1;
                } else if($this->date >= 30){
                    $this->computeDateMonth();
                } else {
                    die('30天的月份天数不在正常范围内');
                }
    
            } else if(in_array($this->month, $this->month_31)) {
    
                if( $this->date >= 1 && $this->date < 31 ) {
                    $this->date = $this->date + 1;
                } else if( $this->date >= 31 ){
                    $this->computeDateMonth();
                } else {
                    die('31天的月份天数不在正常范围内');
                }
    
            } else {
    //            echo $this->month;
                die('年月日不正确');
            }
        }
    
        /**
         * 计算一年当中的月份是否为12个月,如果超过12 就让年份 +1
         */
        private function computeDateMonth() {
            if($this->month >= 1 && $this->month < 12) {
                $this->month = $this->month + 1;
                $this->date = 1;
            } else if($this->month == 12) {
                if( $this->year == date('Y', time()) ) {
                   return;
                } else {
                    $this->year = $this->year + 1;
                    $this->month = 1;
                    $this->computeTime();
                }
            } else {
                die('computeDateMonth函数计算错误');
            }
        }
    
        /**获取用于与HR数据库对比的时间戳,如果定义了年月日 就用定义的时间,否则就取当前时间
         * @param $y           年
         * @param $m           月
         * @param $d           日
         * @param $h           小时
         * @param $i           分钟
         * @param $s           秒
         * @return string      时间戳
         */
        private function getTimeStamp($y = '', $m = '', $d = '', $h = '0', $i = '0', $s = '0') {
            if( $y && $m && $d) {
                return '00' . mktime( $h, $i, $s, $m, $d, $y ) . '000';
            } else {
                return '00' . time() . '000';
            }
        }
    
    
    
    
    }
    
    
    
    
    /* End of file Sync.php */
    /* Location: controllers/sync.php */
  • 相关阅读:
    python分包写入文件,写入固定字节内容,当包达到指定大小时继续写入新文件
    java 封装及this 用法
    [效率提升] 记一次使用工具编辑正则表达式快速输出匹配结果
    java用星星符号打印出一个直角三角形
    java按行和列进行输出数据
    java 三种循环及注意事项
    数据的运算,求和,两数求最大,三数求最大,两数是否相等
    采用位异或方式将两个变量数值调换
    今天遇到一件开心事,在eclipse编写的代码在命令窗口中编译后无法运行,提示 “错误: 找不到或无法加载主类”
    定义 java 基本数据类型
  • 原文地址:https://www.cnblogs.com/itafter/p/4183881.html
Copyright © 2011-2022 走看看