计算日期时间 自动加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 */
时间: 2024-10-20 05:25:06

计算日期时间 自动加1天 PHP计算闰年 java与PHP时间戳对比区别的相关文章

linux下日期时间自动同步设置(rdate,ntpdate两种方法)

linux下同步时间,至少有两种方法:rdate,ntpdate两种.centos最小化安装默认不安装,先确认已经安装过,否则先安装.其中rdate本身是用来获取远程时间服务器上时间用的,带上 -s 参数,就可以将获取到的时间应用到本地系统. NAME       rdate - get the time via the networkSYNOPSIS       rdate [-p] [-s] [-u] [-l] [-t sec] [host...]DESCRIPTION       rdat

Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年

计算年.月.日需要安装组件包 pip install python-dateutil 当前日期时间 import datetime print datetime.datetime.now() # 2018-05-08 16:53:30.101000 格式化时间 import datetime print datetime.datetime.now().strftime("%Y-%m-%d %H:%M") # 2018-05-08 16:54 多加一天 import datetime p

C# 计算日期时间的间隔天数

1 DateTime oldDate = new DateTime(2002,7,15); 2 DateTime newDate = DateTime.Now; 3 // Difference in days, hours, and minutes. 4 TimeSpan ts = newDate - oldDate; 5 // Difference in days. 6 int differenceInDays = ts.Days;

ORACLE函数之日期时间运算函数

1            ADD_MONTHS 格式:ADD_MONTHS(D,N) 说明:返回日期时间D加N月后对应的日期时间.N为正时则表示D之后:N为负时则表示为D之前:N为小数则会自动先删除小数部分,而用整数部分 举例: SQL>SELECT ADD_MONTHS(SYSDATE,7) A,ADD_MONTHS(SYSDATE,-7) B,ADD_MONTHS(SYSDATE,7.9)C FROM DUAL; A                             B        

Android订票系统订票功能实现(特效点击按钮实现票数自动加减1)

要实现的效果是点击加按钮就购买分数自动加一,同时计算合计的总计 先共享一份colors.xml的数据,比较全面,可以根据需要添加 <?xml version="1.0" encoding="UTF-8"?> <resources> <color name="popup_main_background">#b0000000</color> <color name="choose_ear

[转] Java8 日期/时间(Date Time)API指南

[From] http://www.importnew.com/14140.html Java 8日期/时间( Date/Time)API是开发人员最受追捧的变化之一,Java从一开始就没有对日期时间处理的一致性方法,因此日期/时间API也是除Java核心API以外另一项倍受欢迎的内容. 为什么我们需要新的Java日期/时间API? 在开始研究Java 8日期/时间API之前,让我们先来看一下为什么我们需要这样一个新的API.在Java中,现有的与日期和时间相关的类存在诸多问题,其中有: Jav

全面解析Java日期时间API

时区 GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间. UTC(Universal Time Coordinated):统一协调时间,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间,标准 UTC 时间格式 yyyy-MM-dd'T'HH:mm:ss.SSSXXX. 格林尼治时间已经不再被作为标准时间使用,UTC 是最主要的世界时间标准. Java提供了获取当前时间的方法 Syst

SQL Server 2008对日期时间类型的改进

微软在备受多年的争议后,终于对日期时间数据类型开刀了,在新版的SQL Server 2008中一口气增加了4种新的日期时间数据类型,包括: Date:一个纯的日期数据类型. Time:一个纯的时间数据类型. DateTime2:新的日期时间类型,将精度提到到了100纳秒. DateTimeOffset:新的日期时间类型,在DateTime2的基础上增加了时区部分. 下面是在SQL Server 2008中日期时间数据类型的一个简单汇总表: 数据类型 格式 取值范围 精度 存储尺寸 date yy

Java 8 新特性:Java 类库的新特性之日期时间API (Date/Time API ) ——诺诺&quot;涂鸦&quot;记忆

----------   诺诺学习技术交流博客.期待与您交流!    ---------- 详情请查看:http://blog.csdn.net/sun_promise  日期时间API (Date/Time API ) 1.Java8之前java.util.Date和Calendar类的弊端 1)最开始的时候,Date既要承载日期信息,又要做日期之间的转换,还要做不同日期格式的显示,职责较繁杂(不遵守单一职责). 后来从JDK 1.1 开始,这三项职责分开了: 使用Calendar类实现日期和