一、Calander、日期/时间、HRTime扩展的对比
 
Calendar
日期/时间
HRTime
简介
历法扩展集包括了一系列用于在不同历法间进行转换的函数,它是以Julian Day计数为中介或标准来进行的。
Julian Day计数是以公元前的4713年的1月1日为起点的一种计数法。为了在不同历法间进行转换,你首先要转换成Julian Day计数,然后再转换为你所需要的历法。
使用这些函数获取运行 PHP 的服务器的日期和时间或者把日期和时间格式化成不同格式的字符串。
这些函数依赖于服务器的区域设置, 使用它们时要考虑夏令时 (例如:使用 $date = strtotime('+7 days', $date) 而不是 $date += 7*24*60*60) 和闰年的情况。
HRTime扩展实现了一个高分辨率的秒表类(a high resolution StopWatch class)。它在不同的平台上使用最好的API,可高达纳秒,也可以使用低级别的API实现一个自定义秒表。
安装
构建此扩展不需要其他扩展。
使用本类函数,需要在编译 PHP 时加上 --enable-calendar 。
构建此扩展不需要其他扩展。
使用这些函数不需要安装,它们是 PHP 核心的一部分。
需安装此 PECL 扩展
配置
没有在 php.ini 中定义配置指令。
此扩展没有定义资源类型。
这些函数的行为受 php.ini 中的设置影响。
date.timezone — 在未设定 TZ 环境变量时用于所有日期/时间函数的默认时区。
 
函数
cal_days_in_month — 返回某个历法中某年中某月的天数
cal_from_jd — 转换Julian Day计数到一个支持的历法。
cal_info — 返回选定历法的信息
cal_to_jd — 从一个支持的历法转变为Julian Day计数。
easter_date — 得到指定年份的复活节午夜时的Unix时间戳。
easter_days — 得到指定年份的3月21日到复活节之间的天数
FrenchToJD — 从一个French Republican历法的日期得到Julian Day计数。
GregorianToJD — 转变一个Gregorian历法日期到Julian Day计数
JDDayOfWeek — 返回星期的日期
JDMonthName — 返回月份的名称
JDToFrench — 转变一个Julian Day计数到French Republican历法的日期
JDToGregorian — 转变一个Julian Day计数为Gregorian历法日期
jdtojewish — 转换一个julian天数为Jewish历法的日期
JDToJulian — 转变一个Julian Day计数到Julian历法的日期
jdtounix — 转变Julian Day计数为一个Unix时间戳
JewishToJD — 转变一个Jewish历法的日期为一个Julian Day计数
JulianToJD — 转变一个Julian历法的日期为Julian Day计数
unixtojd — 转变Unix时间戳为Julian Day计数
DateTime — The DateTime Class
DateTimeImmutable — The DateTimeImmutable Class
DateTimeInterface — The DateTimeInterface Class
DateTimeZone — The DateTimeZone Class
DateInterval — The DateInterval Class
DatePeriod — The DatePeriod Class
 
Date / Time 函数 — Date / Time 函数及上述几个类中的方法别名
 
 
二、Calendar
作为参数的历法名字可以有:
0 or CAL_GREGORIAN - Gregorian Calendar(公历)
1 or CAL_JULIAN - Julian Calendar(罗马儒略历,公历)
2 or CAL_JEWISH - Jewish Calendar(犹太历)
3 or CAL_FRENCH - French Revolutionary Calendar(法国共和历)
 
觉得很有用的函数有:
① 获得公历所有月份和月份缩写。
cal_info — 返回选定历法的信息
语法:array cal_info ([ int $calendar = -1 ] ),历法信息以一个数组的形式返回,包含的元素有历法名称,历法代码,月份,月份的缩写和单月的最多天数。
<?php
// $info = cal_info();    // 没有指定calendar参数,默认值是-1,返回所有历法信息
$info = cal_info(0);    // 公历
print_r($info);
 
输出:
Array
(
    [months] => Array
        (
            [1] => January
            [2] => February
            [3] => March
            [4] => April
            [5] => May
            [6] => June
            [7] => July
            [8] => August
            [9] => September
            [10] => October
            [11] => November
            [12] => December
        )
 
    [abbrevmonths] => Array
        (
            [1] => Jan
            [2] => Feb
            [3] => Mar
            [4] => Apr
            [5] => May
            [6] => Jun
            [7] => Jul
            [8] => Aug
            [9] => Sep
            [10] => Oct
            [11] => Nov
            [12] => Dec
        )
 
    [maxdaysinmonth] => 31
    [calname] => Gregorian
    [calsymbol] => CAL_GREGORIAN
)
 
② 根据某个Unix时间戳获得对应的详细历法信息。
unixtojd — 转变Unix时间戳为Julian Day计数
语法:int unixtojd ([ int $timestamp = time() ] ),根据指定的Unix时间戳timestamp,返回Julian天数。如果没有指定时间戳则返回当前日期的天数。  
cal_from_jd — 转换Julian Day计数到一个支持的历法。
语法:array cal_from_jd ( int \$jd , int \$calendar ),根据给定的Julian day的jd 天数转换成特定历法calendar中的日期。
<?php
// $today = unixtojd(mktime(0, 0, 0, 8, 17, 2003));
$today = unixtojd();
$jd = cal_from_jd($today, CAL_GREGORIAN);    // 或$jd = cal_from_jd($today, 0);
print_r($jd);
 
输出:
Array
(
    [date] => 8/17/2017
    [month] => 8
    [day] => 17
    [year] => 2017
    [dow] => 4
    [abbrevdayname] => Thu
    [dayname] => Thursday
    [abbrevmonth] => Aug
    [monthname] => August
)
 
③ 根据具体的年月日获得对应的详细历法信息。
cal_to_jd — 从一个支持的历法转变为Julian Day计数。
语法:int cal_to_jd ( int \$calendar , int \$month , int \$day , int \$year ),从一个给定的历法日期计算出Julian天数,其中month,day,year都是数字形式。
cal_from_jd — 同上
<?php
$jd = cal_to_jd(0, 11, 5, 1990);
$cal = cal_from_jd($jd, 0);
print_r($cal);
 
输出:
Array
(
    [date] => 11/5/1990
    [month] => 11
    [day] => 5
    [year] => 1990
    [dow] => 1
    [abbrevdayname] => Mon
    [dayname] => Monday
    [abbrevmonth] => Nov
    [monthname] => November
)
 
三、Date / Time
① 使用DateTime类
如果在php.ini中没有设置时区,则需在代码中指定时区。
常用的方法有:
<?php
date_default_timezone_set('Asia/Shanghai’);
 
// 输出当前时间
$date = new DateTime();
echo $date->format('Y-m-d H:i:s');  // 输出:2017-08-17 18:13:13
 
// 获取特定时间
$date = new DateTime('2014-05-04');
echo $date->format('Y-m-d H:i:s');  // 输出:2014-05-04 00:00:00
 
② 使用DateInterval类
DateInterval表示一段时间间隔,可以对时间进行加减处理。
DateInterval构造函数的参数是一个表示时间间隔约定的字符串,以字母P开头,后面跟着一个整数,最后是一个周期标识符,限定前面的整数。
有效周期标识符为: Y(年) M(月) D(日) W(周) H(时) M(分) S(秒)。
间隔约定中如果既有日期又有时间,需要在日期和时间之间加上字母T,例如,间隔约定P2D表示间隔两天,间隔约定P2DT5H2M表示间隔两天五小时两分钟。
等同于DateInterval::createFromDateString('时间间隔’),如DateInterval::createFromDateString('2 day 5hour 2minute')。
常用的方法有:
<?php
date_default_timezone_set('Asia/Shanghai’);
 
// 创建几天前/后的时间
$date1 = new DateTime();
$date2 = new DateTime();
$interval = new DateInterval('P2DT5H');  // 等同于DateInterval::createFromDateString('2 day 5hour'); 
$date1->add($interval);
echo $date1->format('Y-m-d H:i:s');  // 输出:2017-08-20 05:03:50
echo "<pre>";
$date2->sub($interval);
echo $date2->format('Y-m-d H:i:s');  // 输出:2017-08-15 19:03:50
 
// 还可以用modify方法创建几天前/后的时间
$date = new DateTime();
$date->modify('+1 day');
echo $date->format('Y-m-d H:i:s');  // 输出:2017-08-19 00:16:38
 
// 计算时间间隔
$date1 = new DateTime();
$date2 = new DateTime('2016-12-15');
$diff = $date1->diff($date2);    // 顺序无关,也可以是$date2->diff($date1); 
print_r($diff);
//格式化输出
echo $diff->format("时间间隔为 %Y years %m months and %d days”);
 
输出:
DateInterval Object
(
    [y] => 0
    [m] => 8
    [d] => 3
    [h] => 0
    [i] => 48
    [s] => 54
    [weekday] => 0
    [weekday_behavior] => 0
    [first_last_day_of] => 0
    [invert] => 1
    [days] => 246
    [special_type] => 0
    [special_amount] => 0
    [have_weekday_relative] => 0
    [have_special_relative] => 0
)
时间间隔为 00 years 8 months and 3 days
 
③ 使用DatePeriod类
DatePeriod类的构造方法必须提供三个参数:
一个DateTime实例,表示迭代开始的日期和时间;
一个DateInterval实例,表示下一个日期和时间的间隔;
一个整数,表示迭代的总次数;
第四个参数是可选的,用于显式指定周期的结束日期和时间,如果迭代时想要排除开始日期和时间,可以把构造方法的最后一个参数设为DatePeriod::EXCLUDE_START_DATE常量。
// 迭代输出距离当前日期的前几天日期。
$datetime = new DateTime();
$interval = DateInterval::createFromDateString('-1 day');
$period = new DatePeriod($datetime, $interval, 3);
foreach ($period as $date) {
    echo $date->format('Y-m-d'), PHP_EOL;
}
 
输出:
2017-08-18
2017-08-17
2017-08-16
2017-08-15
 
四、HRTime
HRTime扩展未安装成功,感觉用不到的样子,以后再深入研究,囧。。。

PHP手册-函数参考-日期与时间相关扩展的更多相关文章

  1. PHP手册-函数参考-加密扩展

    一.Crack.CSPRNG.Hash.Mcrypt.Mhash.OpenSSL.密码散列算法的对比   Crack CSPRNG Hash Mcrypt Mhash OpenSSL 密码散列算法 简 ...

  2. hive函数参考手册

    hive函数参考手册 原文见:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 1.内置运算符1.1关系运算符 运 ...

  3. Arduino参考手册-函数和变量及电路图

    标题: Arduino参考手册-函数和变量及电路图 作者: 梦幻之心星 sky-seeker@qq.com 标签: [#Arduino,#参考手册,#函数,#变量] 目录: [Arduino] 日期: ...

  4. LoadRunner中常用函数参考手册

    基础篇1:LoadRunner中常用函数参考手册 常用函数列表 web_url web_submmit_form VS web_submmit_data VS web_custom_request w ...

  5. mysql常用函数参考

    mysql常用函数参考   对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL, ...

  6. PHP函数之日期时间函数date()使用详解

    date()函数是我们在php开发中常碰到并且会使用到的一个日期函数,下面我来给大家介绍date()函数的一些基本扮靓和方法,有需要了解的朋友可进入参考   日期时间函数是PHP 的核心组成部分.无需 ...

  7. DAX和Power BI中的参考日期表

    本文使用Power BI模板描述DAX中的引用Date表,可以在Analysis Services模型中使用相同的技术.在Dax Date Template页面下载最新版本的模板. 为什么引用Date ...

  8. Mysql 函数大全- 5.6 中文解释函数参考

    mysql 函数大全 5.6 函数参考 5.6函数参考    (只翻译部分,细节查看相关英文版) 12.1功能和操作员参考 12.2表达式评估中的类型转换 12.3运营商 12.4控制流功能 12.5 ...

  9. MySQL日期函数与日期转换格式化函数大全

    Mysql作为一款开元的免费关系型数据库,用户基础非常庞大,本文列出了MYSQL常用日期函数与日期转换格式化函数 1.DAYOFWEEK(date) 1 2 SELECT DAYOFWEEK('201 ...

随机推荐

  1. Git stash 常用命令

    参考: Git: How to look at the stash Git学习笔记05--git stash Git stash 常用命令 1.git stash: 保存当前的工作进度: 2.git ...

  2. 操作 frames 框架下的 dom 内容。

    2016-12-30 框架名: var obj=$(window.frames["wangpan"].document).find("a[menu=download_on ...

  3. Java方法中捕获多个异常的处理机制

    /** * @author wangyunhan * @throws Exception */ public static void main(String[] argßs) throws Excep ...

  4. _itemmod_nopatch、_itemmod_nopatch_level、_itemmod_nopatch_spell、_itemmod_nopatch_src、_itemmod_nopatch_stat、_itemmod_nopatch_stat_prefix

    原始物品(_itemmod_nopatch中Entry)需要能够装备 该功能产生的新物品不需要制作dbc 尽量避免配置主动技能(_itemmod_nopatch_spell) _itemmod_nop ...

  5. 【三十二】thinkphp之连接数据库、实例化模型

    1.连接数据库 Thinlphp内置了抽象数据库访问层,把不同的数据操作封装起来.我们只需要调用公共的DB类进行操作即可.DB类会自动调用相应的数据库驱动来处理. 在应用目录/common/conf/ ...

  6. tornado关于AsyncHTTPClient的使用笔记

    先来一段同步的httpclient使用代码 url = 'https://www.baidu.com/' http_client = HTTPClient() response = http_clie ...

  7. spring集成shiro报错解决(no bean named 'shiroFilter' is defined)

    引言: 本人在使用spring集成shiro是总是报“no bean named 'shiroFilter' is defined”,网上的所有方式挨个试了一遍,又检查了一遍, 还是没有解决,最后,抱 ...

  8. mysql 事件 按月分表

    /****** 对象: Table Order_201512 脚本日期: 2015/12/18 11:44:23 ******/ /****** 字段数据长度 = 2599 字节 ******/ CR ...

  9. HTML5语义化

    转载自:https://www.cnblogs.com/fliu/articles/5244866.html 1.什么是HTML语义化? 用合理.正确的标签来展示内容,比如h1~h6定义标题,便于开发 ...

  10. 《剑指offer》第五十五题(平衡二叉树)

    // 面试题55(二):平衡二叉树 // 题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉树中 // 任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. #includ ...