最近几天在做一个项目,主要是将SQLserver数据到MySQL数据库,一个url跑一次 同步一次昨天的数据,由于很多数据需要同步,所以做了一个操作界面的,一个单纯跑url的

在其中涉及到了对于时间的计算!当我写完这个程序的时候,我回头看我写的计算时间的代码。有些都有点儿懵了!。。。在这里记录下来方便以后回忆,也方便别人使用!

代码可能会臃肿!新人一枚!欢迎指正!拒绝骂街哦!

先简单说一下代码,其中主要涉及到计算润年 平年,计算28天 31天 30天月份 等,主要就是判断!代码中有注释,大家看一下,希望大家多多指正缺点!

  /**一年中的31天的月份
* @var array
*/
private $month_31 = array(1,3,5,7,8,10,12); /**一年中30天的月份
* @var array
*/
private $month_30 = array(4,6,9,11); /**查询开始的时间戳
* @var
*/
private $startTimeStamp; /**查询结束的时间戳
* @var
*/
private $endTimeStamp; /-----------------------------------------------计算年月---------------------------------------------------------- /**计算年份是否是闰年,如果是闰年 2月份是29天 平年是28天, 每调用一次这个函数,天数增 加1天
* @return string 时间戳,是经过计算的,前加 '00' 后加'000'
*/
private function computeTime() {
if (($this->year % 4 == 0 && $this->year % 100 != 0) || ($this->year % 400 == 0)) {
$this->computeTimeDate(29);
} else {
$this->computeTimeDate(28);
}
} /**根据月份是多少天,计算日期时间,
* @param $Feb 2月的天数
*/
private function computeTimeDate($Feb) { if ($this->month == 2) { if($this->date >= 1 && $this->date <= $Feb) { $this->date = $this->date + $this->syncNumDate;
//如果加默认天数大于当前月份天数,就计算月份
if( $this->date + $this->syncNumDate > $Feb ) {
$this->computeDateMonth();
} } else if($this->date > $Feb) { $D_value = $this->syncNumDate - ($Feb - $this->date);
if( $D_value != 0 ) {
$this->computeDateMonth($D_value);
} else {
$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 + $this->syncNumDate;
if( $this->date + $this->syncNumDate > 30 ) {
$this->computeDateMonth();
} } else if($this->date >= 30){ $D_value = $this->syncNumDate - (30 - $this->date);
if( $D_value != 0 ) {
$this->computeDateMonth($D_value);
} else {
$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 + $this->syncNumDate;
if( $this->date + $this->syncNumDate > 31 ) {
$this->computeDateMonth();
} } else if( $this->date >= 31 ){ $D_value = $this->syncNumDate - (31 - $this->date);
if( $D_value != 0 ) {
$this->computeDateMonth($D_value);
} else {
$this->computeDateMonth();
} } else {
die('31天的月份天数不在正常范围内');
} } else {
// echo $this->month;
die('函数computeTimeDate计算年月日发生错误');
}
} /**
* 计算加减月份,如果超过12 就让年份 +1 月份恢复到1
* @param $D_value 差值,由于在计算天数的时候,存在加值过大,造成的重复计算,例如30+6 可能计算两次,差值就是 30+1 剩下的5天,在新的月份添加
*/
private function computeDateMonth($D_value='') {
if($this->month >= 1 && $this->month < 12) {
$this->month = $this->month + 1; if( $D_value != '' ) {
$this->date = $D_value;
} else {
$this->date = 1;
}
} else if($this->month == 12) {
if( $this->year == date('Y', time()) ) {
return;
} else {
$this->year = $this->year + 1;
$this->month = 1; if( $D_value != '' ) {
$this->date = $D_value;
} else {
$this->date = 1;
}
// $this->computeTime();
}
} else {
die('computeDateMonth函数计算错误');
}
}

写了以上的代码,也算了解了日期处理的一个过程!对于记忆这个函数更深刻了!~~

其实主要还是自己想写一遍! 至少自己对函数也有一个更好的理解!

以下是用PHP代码实现上面的一堆!

data( 'Y-m-d', strtotime( ' +1 days ' ) );

自学php【二】 PHP计算时间加一天的更多相关文章

  1. 自学php找工作【二】 PHP计算时间加一天

    最近几天在做一个项目,主要是将SQLserver数据到MySQL数据库,一个url跑一次 同步一次昨天的数据,由于很多数据需要同步,所以做了一个操作界面的,一个单纯跑url的 在其中涉及到了对于时间的 ...

  2. python datetime库使用和时间加减计算

    datetime库使用 一.操作当前时间 1.获取当前时间 >>> import datetime >>> print datetime.datetime.now( ...

  3. Android4.0图库Gallery2代码分析(二) 数据管理和数据加载

    Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Androi ...

  4. time函数计算时间

    学过C语言的都知道有个time函数可以计算时间, 也好像知道time(NULL)返回的是一个距离1970年1月1日0时0分0秒的秒数. #include <stdio.h> #includ ...

  5. DB2时间函数 实现 时间加减

    时间加减:后边记得跟上时间类型如day.HOUR TIMESTAMP ( TIMESTAMP(DEF_TIME)+1 day)+18 HOUR   DB2时间函数是我们最常见的函数之一,下面就为您介绍 ...

  6. [转帖]C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义

    C语言计算时间函数 & 理解linux time命令的输出中“real”“user”“sys”的真正含义 https://blog.csdn.net/willyang519/article/d ...

  7. python3笔记二十一:时间操作datetime和calendar

    一:学习内容 datetime calendar 二:datetime 1.模块说明:可以理解为datetime基于time进行了封装,提供了各种使用的函数,datetime模块的接口更直接,更容易调 ...

  8. 【Python】我是如何使计算时间提速25.6倍的

    我是如何使计算时间提速25.6倍的 我的原始文档:https://www.yuque.com/lart/blog/aemqfz 在显著性目标检测任务中有个重要的评价指标, E-measure, 需要使 ...

  9. JAVA获取当前时间加一天

    01.获取当前时间 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return df.for ...

随机推荐

  1. CSS (二)解析CSS盒子

    话说.一写博客还有些莫名的兴奋感-- 这几天一直挤时间忙于赶牛腩视频,迟到的CSS盒子.请谅解. CSS盒子,一開始听起来还有点高大上的赶脚. 后来了解之后,发现事实上非常easy理解.从功能上讲非常 ...

  2. [Algorithms] Insertion sort algorithm using TypeScript

    Insertion sort is a very intuitive algorithm as humans use this pattern naturally when sorting cards ...

  3. HDU 5319 Painter(枚举)

    Painter Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Su ...

  4. Linux下完美使用find+grep实现全局代码搜索

    作者:zhanhailiang 日期:2014-10-11 背景 在Window下有大量方便的图形化工具能够实现全局搜索,可是Linuxserver中因为使用命令行操作导致全局搜索是一个比較高的门槛. ...

  5. tomcat用80port能够启动,可是浏览器不显示tomcat首页

    一.打开执行(ctrl+r)->输入cmd->确定->输入netstat -ano 结果检測到 :80port被system 占用,如图所看到的 打开进程发现确实被 PID为 4 的 ...

  6. docker (1) ---简介,使用

    一.docker简介: 容器( container-based )虚拟化方案,充分利用了操作系统本身已有的机 制和特性,以实现轻量级的虚拟化(每个虚拟机安装的不是完整的虚拟机), 甚至有人把他称为新一 ...

  7. 『NSOperation、NSOperationQueue』详解

    1. NSOperation.NSOperationQueue 简介 NSOperation.NSOperationQueue 是苹果提供给我们的一套多线程解决方案.实际上 NSOperation.N ...

  8. Android学习笔记之Spinner下拉列表使用案例

    (1)两种方法提冲Spinner中的数据源:通过list集合,或者是通过xml文件进行配置 (2)布局代码例如以下: <RelativeLayout xmlns:android="ht ...

  9. 容器ConcurrentHashMap原理(学习)

    一.概述 HashMap 是非线程安全的,在不考虑性能问题的时候,我们的解决方案有 Hashtable 或者Collections.synchronizedMap(hashMap),这两种方式基本都是 ...

  10. 【Codeforces】Round #376 (Div. 2)

    http://codeforces.com/contest/731 不发题面了,自己点链接 总结一下 考场上 原以为这次要加很多raiting... 但FST狗记邓,只加了58rating 总结一下 ...