时间类库
## 使用案例
1、tp5可以放在extend下或者vendor
我放在extend/jplt下面了
2、在控制器或者模型等,用use jplt\Dates;引用
```php
$Dates = new Dates();
$time="1111111111111";
$Dates->timeDiff($time);
```
## 下面是类库的写法
```php
<?php
namespace jplt;
/** jplt\Dates
* 日期时间操作类
* @category ORG
* @package ORG
* @subpackage Date
* @author liu21st <liu21st@gmail.com>
* @version $Id: Date.class.php 2662 2012-01-26 06:32:50Z liu21st $
*/
class Dates {
/**
* 日期的时间戳
* @var integer
* @access protected
*/
protected $date;
/**
* 时区
* @var integer
* @access protected
*/
protected $timezone;
/**
* 年
* @var integer
* @access protected
*/
protected $year;
/**
* 月
* @var integer
* @access protected
*/
protected $month;
/**
* 日
* @var integer
* @access protected
*/
protected $day;
/**
* 时
* @var integer
* @access protected
*/
protected $hour;
/**
* 分
* @var integer
* @access protected
*/
protected $minute;
/**
* 秒
* @var integer
* @access protected
*/
protected $second;
/**
* 星期的数字表示
* @var integer
* @access protected
*/
protected $weekday;
/**
* 星期的完整表示
* @var string
* @access protected
*/
protected $cWeekday;
/**
* 一年中的天数 0-365
* @var integer
* @access protected
*/
protected $yDay;
/**
* 月份的完整表示
* @var string
* @access protected
*/
protected $cMonth;
/**
* 日期CDATE表示
* @var string
* @access protected
*/
protected $CDATE;
/**
* 日期的YMD表示
* @var string
* @access protected
*/
protected $YMD;
/**
* 时间的输出表示
* @var string
* @access protected
*/
protected $CTIME;
// 星期的输出
protected $Week = array("日","一","二","三","四","五","六");
/**
* 架构函数
* 创建一个Date对象
* @param mixed $date 日期
* @static
* @access public
*/
public function __construct($date='') {
//分析日期
$this->date = $this->parse($date);
$this->setDate($this->date);
}
/**
* 日期分析
* 返回时间戳
* @static
* @access public
* @param mixed $date 日期
* @return string
*/
public function parse($date) {
if (is_string($date)) {
if (($date == "") || strtotime($date) == -1) {
//为空默认取得当前时间戳
$tmpdate = time();
} else {
//把字符串转换成UNIX时间戳
$tmpdate = strtotime($date);
}
} elseif (is_null($date)) {
//为空默认取得当前时间戳
$tmpdate = time();
} elseif (is_numeric($date)) {
//数字格式直接转换为时间戳
$tmpdate = $date;
} else {
if (get_class($date) == "Date") {
//如果是Date对象
$tmpdate = $date->date;
} else {
//默认取当前时间戳
$tmpdate = time();
}
}
return $tmpdate;
}
/**
* 验证日期数据是否有效
* @access public
* @param mixed $date 日期数据
* @return string
*/
public function valid($date) {
}
/**
* 日期参数设置
* @static
* @access public
* @param integer $date 日期时间戳
* @return void
*/
public function setDate($date) {
$dateArray = getdate($date);
$this->date = $dateArray[0]; //时间戳
$this->second = $dateArray["seconds"]; //秒
$this->minute = $dateArray["minutes"]; //分
$this->hour = $dateArray["hours"]; //时
$this->day = $dateArray["mday"]; //日
$this->month = $dateArray["mon"]; //月
$this->year = $dateArray["year"]; //年
$this->weekday = $dateArray["wday"]; //星期 0~6
$this->cWeekday = '星期'.$this->Week[$this->weekday];//$dateArray["weekday"]; //星期完整表示
$this->yDay = $dateArray["yday"]; //一年中的天数 0-365
$this->cMonth = $dateArray["month"]; //月份的完整表示
$this->CDATE = $this->format("%Y-%m-%d");//日期表示
$this->YMD = $this->format("%Y%m%d"); //简单日期
$this->CTIME = $this->format("%H:%M:%S");//时间表示
return ;
}
/**
* 日期格式化
* 默认返回 1970-01-01 11:30:45 格式
* @access public
* @param string $format 格式化参数
* @return string
*/
public function format($format = "%Y-%m-%d %H:%M:%S") {
return strftime($format, $this->date);
}
/**
* 是否为闰年
* @static
* @access public
* @return string
*/
public function isLeapYear($year='') {
if(empty($year)) {
$year = $this->year;
}
return ((($year % 4) == 0) && (($year % 100) != 0) || (($year % 400) == 0));
}
/**
* 计算日期差
*
* w - weeks
* d - days
* h - hours
* m - minutes
* s - seconds
* @static
* @access public
* @param mixed $date 要比较的日期
* @param string $elaps 比较跨度
* @return integer
*/
public function dateDiff($date, $elaps = "d") {
$__DAYS_PER_WEEK__ = (7);
$__DAYS_PER_MONTH__ = (30);
$__DAYS_PER_YEAR__ = (365);
$__HOURS_IN_A_DAY__ = (24);
$__MINUTES_IN_A_DAY__ = (1440);
$__SECONDS_IN_A_DAY__ = (86400);
//计算天数差
$__DAYSELAPS = ($this->parse($date) - $this->date) / $__SECONDS_IN_A_DAY__ ;
switch ($elaps) {
case "y"://转换成年
$__DAYSELAPS = $__DAYSELAPS / $__DAYS_PER_YEAR__;
break;
case "M"://转换成月
$__DAYSELAPS = $__DAYSELAPS / $__DAYS_PER_MONTH__;
break;
case "w"://转换成星期
$__DAYSELAPS = $__DAYSELAPS / $__DAYS_PER_WEEK__;
break;
case "h"://转换成小时
$__DAYSELAPS = $__DAYSELAPS * $__HOURS_IN_A_DAY__;
break;
case "m"://转换成分钟
$__DAYSELAPS = $__DAYSELAPS * $__MINUTES_IN_A_DAY__;
break;
case "s"://转换成秒
$__DAYSELAPS = $__DAYSELAPS * $__SECONDS_IN_A_DAY__;
break;
}
return $__DAYSELAPS;
}
/**
* 人性化的计算日期差
* @static
* @access public
* @param mixed $time 要比较的时间
* @param mixed $precision 返回的精度
* @return string
*/
public function timeDiff( $time ,$precision=false) {
if(!is_numeric($precision) && !is_bool($precision)) {
static $_diff = array('y'=>'年','M'=>'个月','d'=>'天','w'=>'周','s'=>'秒','h'=>'小时','m'=>'分钟');
return ceil($this->dateDiff($time,$precision)).$_diff[$precision].'前';
}
$diff = abs($this->parse($time) - $this->date);
static $chunks = array(array(31536000,'年'),array(2592000,'个月'),array(604800,'周'),array(86400,'天'),array(3600 ,'小时'),array(60,'分钟'),array(1,'秒'));
$count =0;
$since = '';
for($i=0;$i<count($chunks);$i++) {
if($diff>=$chunks[$i][0]) {
$num = floor($diff/$chunks[$i][0]);
$since .= sprintf('%d'.$chunks[$i][1],$num);
$diff = (int)($diff-$chunks[$i][0]*$num);
$count++;
if(!$precision || $count>=$precision) {
break;
}
}
}
return $since.'前';
}
/**
* 返回周的某一天 返回Date对象
* @access public
* @return Date
*/
public function getDayOfWeek($n){
$week = array(0=>'sunday',1=>'monday',2=>'tuesday',3=>'wednesday',4=>'thursday',5=>'friday',6=>'saturday');
return (new Date($week[$n]));
}
/**
* 计算周的第一天 返回Date对象
* @access public
* @return Date
*/
public function firstDayOfWeek() {
return $this->getDayOfWeek(1);
}
/**
* 计算月份的第一天 返回Date对象
* @access public
* @return Date
*/
public function firstDayOfMonth() {
return (new Date(mktime(0, 0, 0,$this->month,1,$this->year )));
}
/**
* 计算年份的第一天 返回Date对象
* @access public
* @return Date
*/
public function firstDayOfYear() {
return (new Date(mktime(0, 0, 0, 1, 1, $this->year)));
}
/**
* 计算周的最后一天 返回Date对象
* @access public
* @return Date
*/
public function lastDayOfWeek() {
return $this->getDayOfWeek(0);
}
/**
* 计算月份的最后一天 返回Date对象
* @access public
* @return Date
*/
public function lastDayOfMonth() {
return (new Date(mktime(0, 0, 0, $this->month + 1, 0, $this->year )));
}
/**
* 计算年份的最后一天 返回Date对象
* @access public
* @return Date
*/
public function lastDayOfYear() {
return (new Date(mktime(0, 0, 0, 1, 0, $this->year + 1)));
}
/**
* 计算月份的最大天数
* @access public
* @return integer
*/
public function maxDayOfMonth() {
$result = $this->dateDiff(strtotime($this->dateAdd(1,'m')),'d');
return $result;
}
/**
* 取得指定间隔日期
*
* yyyy - 年
* q - 季度
* m - 月
* y - day of year
* d - 日
* w - 周
* ww - week of year
* h - 小时
* n - 分钟
* s - 秒
* @access public
* @param integer $number 间隔数目
* @param string $interval 比较类型
* @return Date
*/
public function dateAdd($number = 0, $interval = "d") {
$hours = $this->hour;
$minutes = $this->minute;
$seconds = $this->second;
$month = $this->month;
$day = $this->day;
$year = $this->year;
switch ($interval) {
case "yyyy":
//---Add $number to year
$year += $number;
break;
case "q":
//---Add $number to quarter
$month += ($number*3);
break;
case "m":
//---Add $number to month
$month += $number;
break;
case "y":
case "d":
case "w":
//---Add $number to day of year, day, day of week
$day += $number;
break;
case "ww":
//---Add $number to week
$day += ($number*7);
break;
case "h":
//---Add $number to hours
$hours += $number;
break;
case "n":
//---Add $number to minutes
$minutes += $number;
break;
case "s":
//---Add $number to seconds
$seconds += $number;
break;
}
return (new Date(mktime($hours,
$minutes,
$seconds,
$month,
$day,
$year)));
}
/**
* 日期数字转中文
* 用于日和月、周
* @static
* @access public
* @param integer $number 日期数字
* @return string
*/
public function numberToCh($number) {
$number = intval($number);
$array = array('一','二','三','四','五','六','七','八','九','十');
$str = '';
if($number ==0) { $str .= "十" ;}
if($number < 10){
$str .= $array[$number-1] ;
}
elseif($number < 20 ){
$str .= "十".$array[$number-11];
}
elseif($number < 30 ){
$str .= "二十".$array[$number-21];
}
else{
$str .= "三十".$array[$number-31];
}
return $str;
}
/**
* 年份数字转中文
* @static
* @access public
* @param integer $yearStr 年份数字
* @param boolean $flag 是否显示公元
* @return string
*/
public function yearToCh( $yearStr ,$flag=false ) {
$array = array('零','一','二','三','四','五','六','七','八','九');
$str = $flag? '公元' : '';
for($i=0;$i<4;$i++){
$str .= $array[substr($yearStr,$i,1)];
}
return $str;
}
/**
* 判断日期 所属 干支 生肖 星座
* type 参数:XZ 星座 GZ 干支 SX 生肖
*
* @static
* @access public
* @param string $type 获取信息类型
* @return string
*/
public function magicInfo($type) {
$result = '';
$m = $this->month;
$y = $this->year;
$d = $this->day;
switch ($type) {
case 'XZ'://星座
$XZDict = array('摩羯','宝瓶','双鱼','白羊','金牛','双子','巨蟹','狮子','处女','天秤','天蝎','射手');
$Zone = array(1222,122,222,321,421,522,622,722,822,922,1022,1122,1222);
if((100*$m+$d)>=$Zone[0]||(100*$m+$d)<$Zone[1])
$i=0;
else
for($i=1;$i<12;$i++){
if((100*$m+$d)>=$Zone[$i]&&(100*$m+$d)<$Zone[$i+1])
break;
}
$result = $XZDict[$i].'座';
break;
case 'GZ'://干支
$GZDict = array(
array('甲','乙','丙','丁','戊','己','庚','辛','壬','癸'),
array('子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥')
);
$i= $y -1900+36 ;
$result = $GZDict[0][$i%10].$GZDict[1][$i%12];
break;
case 'SX'://生肖
$SXDict = array('鼠','牛','虎','兔','龙','蛇','马','羊','猴','鸡','狗','猪');
$result = $SXDict[($y-4)%12];
break;
}
return $result;
}
public function __toString() {
return $this->format();
}
}
```
- 服务器购买到搭建宝塔
- 结构规范
- php基础
- php简介
- php是什么
- PHP 能做什么
- PHP 如何运行
- 如何了解弱语言
- 安装环境
- 安装LNMP
- 宝塔
- phpstudy
- PHP基本语法
- PHP 标记
- 从 HTML 中分离
- 指令分隔符
- 注释
- php 数据类型
- 类型检测
- 四种标量类型
- boolean(布尔型)
- Integer 整型
- Float 浮点型
- String 字符串类型
- 两种复合类型
- array(数组)
- object(对象)
- 两种特殊类型
- resource(资源)
- NULL(无类型)
- 类型转换
- 变量
- 变量定义和命名规范
- 传值和引用
- 预定义变量
- php预定义变量
- $_SERVER详解
- 变量范围
- 全局变量
- 静态变量
- 可变变量
- 常量
- 常量简介
- 常量定义
- 相比变量
- 魔术常量
- 运算符
- 运算符简介
- 算术运算符
- 赋值运算符
- 位运算符
- 比较运算符
- 错误控制运算符
- 执行运算符
- 递增(减)运算符
- 逻辑运算符
- 字符串运算符
- 数组运算符
- 新增操作符
- 控制结构
- 控制简介
- if 语句
- while 语句
- for 语句
- foreach 语句
- break 语句
- continue 语句
- switch 语句
- declare 语句
- return 语句
- include 语句
- PHP 函数
- 函数简介
- 用户自定义函数
- 函数的参数
- 返回值
- 可变函数
- 内部函数
- 匿名函数
- PHP 的类和对象
- PHP 的类和对象简介
- 基本概念
- 对象继承
- 属性
- 类常量
- 自动加载对象
- 构造和析构函数
- 访问控制
- 范围解析操作符(::)
- 静态static
- Static 关键字
- 抽象类
- 接口
- 匿名类
- 面向对象其他特性
- const关键字
- final关键字
- abstract用于定义抽象方法和抽象类。
- self、$this、parent::关键字
- 接口(interface)
- trait关键字
- instanceof关键字
- 魔术方法
- 构造函数和析构函数
- 私有属性的设置获取
- __toString()方法
- __clone()方法
- __call()方法
- 类的自动加载
- 会话控制
- cookie
- PHP 操作 cookie
- 项目实战
- SESSION
- Session 的初步介绍与实验准备
- PHP 操作 session
- 项目实战2
- http
- 特点
- 工作过程
- request
- response
- HTTP状态码
- URL
- GET和POST的区别
- HTTPS
- 常用函数
- 常用的字符串函数
- 常用的数组函数
- 常用文件函数
- 常用时间函数
- 常用日历函数
- 常用url函数
- 面试题常见
- 时间戳
- 技术类文档
- 技术开发文档
- 开发环境
- 开发规范
- 注释规范
- 开发目录结构
- 数据库字典
- 路由
- 定时任务
- 获取系统配置
- 系统常用函数
- 后台表单
- 消息队列
- 第三方类库标注
- 需求文档
- 数据库
- MYSQL
- 事务(重点)
- 索引
- 存储过程
- 触发器
- 视图
- 导入导出数据库
- 优化mysql数据库的方法
- MyISAM与InnoDB区别
- 外连接、内连接的区别
- 物理文件结构
- MongoDB
- Redis
- 运用场景和实例
- pgsql
- 服务器
- Nginx
- 正向代理和反向代理
- 负载均衡
- Linux常用命令
- 基本目录和命令
- php开发工具
- phpStorm编辑器
- 安装和汉化
- 链接ftp
- 常用操作
- 常用快捷键
- 自定义快捷键
- 使用快捷键新建目录和文件
- 使用快捷键快速查找文件、类、方法
- 多文件切换
- 快速搜索设置项
- 多点编辑
- 方法重构
- 自定义文件模板和代码片段
- 自定义文件模板
- 自定义代码片段
- Xdebug 调试插件
- 安装Xdebug 调试插件
- 在PHPStorm 中使用 Xdebug 插件调试代码
- Vi Box虚拟机
- Vi Box 虚拟机 Oracle VM VirtualBox
- 虚拟机辅助工具一-Vagrant
- 华硕主板BIOS设置中VT虚拟化技术选项怎么开启 Oracle VM VirtualBox
- 沟通工具
- 文档分享
- 流程图
- 任务分配
- 代码托管
- 缺陷管理
- 设计图
- gitLab
- 安装
- 汉化
- Gitlab 用户和项目管理
- Gitlab 持续集成与自动构建实践
- PHP进阶
- 大流量解决方案
- PSR规范
- RESTFUL规范
- 设计模式
- 单例模式
- 策略模式
- 工厂模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 外观模式
- 享元模式
- 代理模式
- 命令模式
- 中介者模式
- 观察者模式
- 状态模式
- 建筑者模式
- 适配器模式
- 桥接模式
- 装饰器模式
- 排序算法
- 冒泡排序算法
- 二分查找算法
- 直接插入排序算法
- 希尔排序算法
- 选择排序算法
- 快速排序算法
- 常见网络攻击类型
- CSRF攻击
- XSS攻击
- SQL注入
- Cookie攻击
- thinkphp
- thinkphp5命令行
- git
- Git 常用命令操作和基础学习
- 傻瓜与白痴的笔记本
- 学习
- 一、Git 与 GitHub 的来历
- 二、在 GitHub 上创建仓库
- 三、安装
- Windows 上安装 Git
- 安装2
- 四、克隆 GitHub 上的仓库到本地
- 五、GIT基本操作哦
- 六、Git 分支操作
- 一、添加SSH关联授权
- 二、为 Git 命令设置别名
- 三、Git 分支管理
- 七、多人协作 GitHub 部分
- 八、多人协作 Git 部分
- 九、Git tag 和 GitHub releases
- composer
- Composer 基础使用
- 安装和使用
- 在项目中集成PHPmailer
- 认识composer.json和composer.lock文件
- composer的其他命令操作
- 本地创建composer包
- 提交自己的依赖包到composer Packagist
- crontab计划任务
- Linux任务计划crontab
- php 的 计划任务——Crontab
- bootstrap前端框架
- 入门
- 实战技巧
- 后台模板样式——admin
- 第三方接口对接
- 微信
- 敏感词过滤
- 微信图片检测
- 短信类型
- 阿里云短信
- 容联云短信
- 飞鸽短信
- 媒体
- 新闻接口测试
- 免费新闻
- 免费视频
- nba赛事,未测试
- 豆瓣电影接口
- 音乐接口
- 网易短视频接口
- 知乎微信接口
- 百度ai
- 百度语音
- 图片识别
- 腾讯
- 腾讯im
- 腾讯云直播
- 腾讯滑动验证
- 物流快递
- 快递鸟、快递100
- 推送
- 极光推送
- 地图&天气
- 获取城市和天气预报
- 地址获取和定位
- 地址转换经纬度
- 图片类型
- 360新闻图片
- 多平台翻译
- 实名认证
- 七牛云
- 云合同
- 多站点收录查询接口
- 打印机
- 第三方登录
- 微信登录
- 支付
- 支付宝app支付
- 微信提现+退款
- 微信app支付
- 微信支付公式
- 类库
- 图片类
- phpqrcode实战:生成二维码
- 图片处理类
- 验证码类
- 消息类
- PHPMailer
- 分词类
- ik
- PHPAnalysis
- 自己封装的方法
- GD库
- 自动获取图片主题颜色
- 图片转素描
- 生成海报
- 图片转字符
- 验证码
- 图片转黑白灰
- GD库实现图片水印与缩略图
- Imagick扩展
- 将一张image图片转化为字符串的形式
- 基本方法
- 图片路径转base64
- 生成文件后缀图片
- url路径判断拼接
- 防篡改入口文件
- php中文姓名判断
- 可控抽奖
- 特殊截取
- 银行卡位(特殊卡号不支持)
- 微信红包计算
- 数组和对象互转
- php批量更新修改数据库
- base64_img上传
- 删库删目录————跑路
- 字符串特殊符号过滤
- 首字母转成默认头像
- 生成随机字符串
- 根据id转 邀请码
- 日志写入
- 字符串截取,超出显示省略号
- 清除html标签+清除html标签,字符串截取
- 计算时间差的函数和演示
- php判断路径是否是绝对路径,如果不是拼接至绝对路径
- sql 参数过滤
- php敏感词过滤
- 省市区分别截取
- 生成csv
- 无限极分类
- api接口返回封装的方法函数
- xml和数组互转
- 获取thinkph5下控制器和方法名
- 过滤
- 获取服务器信息
- php随机颜色
- 创建多级目录
- 推广码
- 跨域检测
- 二维码
- 文档类
- word
- PHPWord
- tcPdf
- MPDF
- dompdf
- FPDF、Fpdi类库
- excel
- PhpSpreadsheet导入
- phpExcel
- 时间
- PHP-农历+节气+节日等类库
- 时间类库
- 最好用的是人性化时间差
- 文件管理类
- 文件操作类
- 文件夹操作
- php操作ftp的类库
- curl
- 数据库操作类
- Db扩展函数
- 数据库备份
- 仿tp5的Db库
- 不常用mysql
- 自动生成数据库字典
- 字符串
- 字符串操作helper/Str
- 随机生成姓名
- 随机生成类
- php字符串类
- 中文转拼音的类库
- 分类
- 缓存
- 数据验证
- 身份证相关操作
- 安全类
- 表单生成类
- 自动生成表单,未完待续中