一、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. 【NOIP 2016】Day2 T3 愤怒的小鸟

    Problem Description \(Kiana\) 最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 \((0,0)\) 处,每次 \(Kiana\ ...

  2. 51nod 1275 连续字段的差异(单调队列)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1275 题意: 思路: 固定某个端点,然后去寻找满足能满足要求的最大区间, ...

  3. JS进阶系列之this (call、apply、bind)

    在javascript中,this的指向是在执行上下文的创建阶段确定的,其实只要知道不同执行方式下,this的指向分别是是什么,就能很好的掌握this这个让人摸不透的东西. 一.全局执行 全局执行又分 ...

  4. 用Let's Encrypt实现Https(Windows环境+Tomcat+Java)

    补充1: 已解决20的部分问题,移步这里 单域名下多子域名同时认证HTTPS 补充2: 之前忘了说了,我这个方法只对Tomcat7.0以上有用(要不然就是8.0...) 我自己用的是9.0 原因好像是 ...

  5. android studio 的基本使用和建立一个小项目

    https://github.com/allenxieyusheng/Android-Studio

  6. C# 用面向对象的思想去编程

    再接上一篇博文,之前写的两篇博文虽然实现了功能,但是和控件之间的粘性太大,依赖于控件进行操作,所以这篇博文主要用面向对象的思想做一个Demo,将逻辑层与显示层剥离开 首先新建一个窗体文件,搭建界面完毕 ...

  7. django自定制Admin

    如果只是在admin中简单的展示及管理模型,那么在admin.py模块中使用admin.site.register将模型注册一下就好了: from django.contrib import admi ...

  8. [转]QT中QString与string的转化,解决中文乱码问题

    QString str2qstr(const string str) { return QString::fromLocal8Bit(str.data()); } string qstr2str(co ...

  9. vue中eslintrc.js配置最详细介绍

    本文是对vue项目中自带文件eslintrc.js的内容解析, 介绍了各个eslint配置项的作用,以及为什么这样设置. 比较详细,看完能对eslint有较为全面的了解,基本解除对该文件的疑惑. /* ...

  10. Object_C 与JavaScript交互使用总结

    iOS开发中oc与js交互的方式有很多,我们可以使用流行的第三方库如:WebviewJavaScriptBridge和OVGap,这两个库都是让webview与JS建立起一条桥梁,我们也可以使用iOS ...