一、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. Echarts 设置地图上文字大小及颜色

    Echarts 设置地图上文字大小及颜色,效果如下: 上代码:关键代码用红色 series: [ { //name: '香港18区人口密度', type: 'map', mapType: 'jiang ...

  2. 微信小程序之倒计时插件 wxTimer

    微信小程序之倒计时插件   wxTimer 介绍: 用于在微信小程序中进行倒计时的组件. 功能: 1.最基础的当然就是倒计时功能了. 2.可以设置倒计时结束后执行的事件. 3.可以设置倒计时执行过程中 ...

  3. 小程序之取标签中内容 例如view,text

    // index.wxml页面 data-url为自定义 {{}}中内容可为后台请求到的数据 也可为固定内容例如:data-text="哈哈哈" data-url="ht ...

  4. activity 运行流程

    图1 图2 图3 图四

  5. Spring的一个入门例子

    例子参考于:Spring系列教材 以及<轻量级JavaEE企业应用实战> Axe.class package com.how2java.bean; public class Axe { p ...

  6. 日志log4cxx 封装、实例讲解、配置文件log4cxx.properties

    日志log4cxx 封装.实例讲解.配置文件log4cxx.properties 1. 日志作用 程序运行过程中,需要记录程序中的运行状况,方便排查问题,记录数据.可以根据日志的记录快速定位错误发生的 ...

  7. Java HashMap 遍历、删除、排序

    首先创建一个map对象,并依次放入几个测试数据 HashMap<String, Integer> map = new HashMap<String, Integer>(); m ...

  8. Codeforces 1006 F - Xor-Paths

    F - Xor-Path 思路: 双向搜索dfs 如果普通的搜索复杂度是n 那么双向搜索复杂度是√n 代码: #include<bits/stdc++.h> using namespace ...

  9. css sticker footer

    .detail position: fixed z-index: 100 top: 0 left: 0 width: 100% height: 100% overflow: auto .detail- ...

  10. Python全栈开发-Day8-Socket网络编程

    本节内容 断言 Socket构建框架 ftp构建框架 Socket粘包 Socket介绍 Socket参数介绍 基本Socket实例 通过Socket实现简单SSH SocketServer 支持多用 ...