一、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. 创建react项目

    npm搭建React项目 React官网提供最简便的方法是使用create-react-app npx create-react-app my-app cd my-app npm start 也可以自 ...

  2. SPA中,Node路由优先级高于React路由

    一.问题描述 在一场面试中,面试官问到了React和Node路由之间的关系. 现在SPA(单页面应用)的使用越来越广. Node(后台)和React(前端)都有自己的路由,当我页面访问一个URL的时候 ...

  3. SNMOJ 31

    考虑将给入的$A$数组差分,得到差分数组$C$ 每一次操作相当于把差分数组的每一位${+1}$,其中一个位置上${-n+1}$. 我们可以直接算出要进行多少次操作:${T=\frac{\sum A[i ...

  4. MATLAB数据类型

    数据类型 1数值类型 @整数 *浮点型转整数型的转换函数,将数值转换为最为接近的整数值,若分数部分为0.5时,转换为最接近的两个整数中绝对值较大的一个. *取整函数: floor(x)向下取整 cei ...

  5. Spring Bean的生命周期例子

    以下例子源于:W3Cschool,在此作记录 HelloWorld.java package com.how2java.w3cschool.beanlife; public class HelloWo ...

  6. Linux环境下配置及启动Hadoop(伪集群)

    1.下载tag软件包后,我习惯放到software文件夹下,并建立app文件夹2.通过tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz -C ~/app/ 命令解压到app ...

  7. pip切换国内源(解决pipenv lock特别慢)

    切换方法参考https://blog.csdn.net/chenghuikai/article/details/55258957 实测,确实解决了pipenv这个问题,否则只能--skip-lock. ...

  8. x1c2017 8G版 win linux的取舍纠结记录

    x1c 2017 的 i5 7200U 8G ram 的丐版.换了1T SSD.其实一般使用没啥问题. 1 外出携带的轻便性太满意(mac13寸相比之下都太重了): 2 coding时候的安静性,比原 ...

  9. Python 编程快速上手 第九章 组织文件

    上一章节,主要讲了如何用 Python 进行创建并写入新文件.这一章节,讲了对如何用 Python 对文件进行进一步的操作,包括: 移动,复制,删除文件 改名 压缩文件 [shutil]移动,复制,删 ...

  10. 一个使用Jmeter做接口性能测试的实战案例

    1 安装并配置Jmeter Jmeter的安装不在这里阐述,安装步骤非常简单. 直接进入主题 1.1 数据库连接配置 由于测试过程需要调用数据库获取响应部署数据,因此需要先建立与数据库的连接. 如果不 ...