首页 > 编程语言 >PHP中的日期和时间处理函数详解

PHP中的日期和时间处理函数详解

时间:2024-01-06 10:31:52浏览次数:39  
标签:format date 日期 详解 DateTimeImmutable 字符串 时间 PHP 处理函数

在 Web 开发中,处理日期和时间是一个常见的任务。PHP 提供了一系列强大的日期和时间处理函数,例如strtotimedateDateTimeImmutable::createFromFormat等。

这些函数使得在不同的时间格式之间进行转换,进行日期和时间计算以及格式化输出变得更加便捷。

本文将深入探讨这三个函数的用法和优势。

1. strtotime 函数

strtotime函数用于将人类可读的日期和时间字符串转换为 Unix 时间戳。它可以接受一个日期时间字符串作为参数,并尝试解析它并将其转换为对应的 Unix 时间戳。除了接受基本的日期时间格式外,它还可以理解各种相对时间表达式。以下是strtotime函数的参数和作用:

strtotime(string $datetime, ?int $baseTimestamp = null): int|false
  • 参数:string $datetime, ?int $baseTimestamp = null
  • $datetime:需要解析的日期时间字符串。
  • $baseTimestamp:可选参数,表示用于计算相对日期的基础时间戳。
  • 返回值:解析成功则返回对应的 Unix 时间戳,解析失败则返回false

使用strtotime函数时,可以传递各种不同格式的日期时间字符串,包括绝对时间(如"2023-08-06"、"15:30:00")以及相对时间(如"tomorrow"、"next week")。

函数会尝试根据传入的字符串进行合理的日期时间转换,方便进行时间的计算和比较。

echo strtotime("2023-08-06 15:30:00"), PHP_EOL;
echo strtotime("tomorrow"), PHP_EOL;
echo strtotime("+1 day"), PHP_EOL;

2. date 函数

date函数用于将 Unix 时间戳格式化为所需的日期和时间字符串。它接受一个格式字符串和一个 Unix 时间戳作为参数,然后返回一个格式化后的日期时间字符串。以下是date函数的参数和作用:

date(string $format, ?int $timestamp = null): string
  • 参数:string $format, ?int $timestamp = null
  • $format:日期时间格式字符串,其中包含各种格式化选项,用于定义输出的日期时间样式。
  • $timestamp:可选参数,表示需要格式化的 Unix 时间戳。默认为time()函数的返回值,即当前的 Unix 时间戳。
  • 返回值:根据指定格式返回格式化后的日期时间字符串。

date函数的第一个参数是日期格式字符串,其中包含各种格式化选项,例如"Y"代表年份,"m"代表月份,"d"代表日期,"H"代表小时,"i"代表分钟,"s"代表秒等。

// set the default timezone to use.
date_default_timezone_set('UTC');


// Prints something like: Monday
echo date("l");

// Prints something like: Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');

// Prints: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));

/* use the constants in the format parameter */
// prints something like: Wed, 25 Sep 2013 15:28:57 -0700
echo date(DATE_RFC2822);

// prints something like: 2000-07-01T00:00:00+00:00
echo date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));

通过组合这些选项,就可以创建出各种不同的日期和时间格式。

3. DateTimeImmutable::createFromFormat 方法

DateTimeImmutable::createFromFormat方法是面向对象的日期和时间处理方式,根据指定的格式将日期字符串解析为DateTimeImmutable对象。

这对于处理不同地区的日期格式或需要更精确解析的日期字符串非常有用。

public static DateTimeImmutable::createFromFormat(string $format, string $datetime, ?DateTimeZone $timezone = null): DateTimeImmutable|false

date_create_immutable_from_format(string $format, string $datetime, ?DateTimeZone $timezone = null): DateTimeImmutable|false

以下是DateTimeImmutable::createFromFormat方法的参数和作用:

  • 参数:string $format, string $datetime, ?DateTimeZone $timezone = null
  • $format:日期时间格式字符串,用于指定输入的日期时间字符串的格式。
  • $datetime:需要解析的日期时间字符串。
  • $timezone:可选参数,用于设置解析后的DateTimeImmutable对象的时区。如果不指定,默认为null,表示使用服务器的时区设置。
  • 返回值:如果解析成功,则返回一个DateTimeImmutable对象,如果解析失败,则返回false

使用DateTimeImmutable::createFromFormat方法时,您需要定义一个格式字符串,该格式字符串与输入的日期时间字符串相匹配。

$dateString = "06/08/2023";
$format = "d/m/Y";
$dateTime = DateTimeImmutable::createFromFormat($format, $dateString);

if ($dateTime instanceof DateTimeImmutable) {
    echo $dateTime->format("Y-m-d"); // 输出:2023-08-06
}

总结

在 PHP 中,日期和时间处理是一个常见但复杂的任务。strtotimedateDateTimeImmutable::createFromFormat这三个函数为我们提供了强大的工具,使得处理不同格式的日期和时间变得更加便捷。

strtotime用于将字符串转换为 Unix 时间戳,date用于将时间戳格式化为可读的字符串,而DateTimeImmutable::createFromFormat则允许更精确地解析日期字符串。

通过熟练掌握这些函数,可以更好地处理和管理日期时间相关的任务,提升 Web 开发效率。

标签:format,date,日期,详解,DateTimeImmutable,字符串,时间,PHP,处理函数
From: https://blog.51cto.com/u_11365839/9125803

相关文章

  • Redis持久化机制详解
    Redis持久化机制详解1.RDB持久化Redis可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。Redis创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本(Redis主从结构,主要用来提高Redis性能),还可以将快照留在原地以......
  • 无涯教程-Redis - PHP连接
    在PHP程序中开始使用Redis之前,需要确保已在计算机上设置了RedisPHP驱动程序和PHP,您可以检查PHP教程以在您的计算机上安装PHP。现在,让无涯教程检查如何设置RedisPHP驱动程序。您需要从github存储库https://github.com/nicolasff/phpredis  下载phpredis,下载后,将文件解压缩......
  • PHP的array_column()函数用法详解
    在PHP中,经常需要对数组进行处理和操作。有时候,需要从一个多维数组中获取特定的一列数据,这时候就可以使用array_column()函数来实现。本文将详细介绍array_column()函数的用法。一、什么是array_column()函数array_column()是一个PHP函数,用于从一个多维数组中获取指定的一列数据。该......
  • ctfshow-misc详解(持续更新中)
    杂项签到题目是个损坏的压缩包,考点:伪加密修改如下:保存解压得到flagflag{79ddfa61bda03defa7bfd8d702a656e4}misc2题目描述:偶然发现我竟然还有个软盘,勾起了我的回忆。我的解答:随便选一个虚拟机,然后编辑虚拟机设置然后添加选择软盘驱动器选择使用软盘映......
  • eslintrc.js配置文件详解
    转自:https://www.jianshu.com/p/fe727ad2bbf4通俗说就是统一代码规范。配置参数rules:{"规则名":[规则值,规则配置]}规则值"off"或者0//关闭规则关闭"warn"或者1//在打开的规则作为警告(不影响退出代码)"error"或者2//把规则作为一个错误(退出代码触......
  • requests库和requests模块使用详解
    一、requests简介#简介:使用requests可以模拟浏览器的请求,比起之前用的urllib,requests模块的api更加便捷(本质就是封装了urllib3)#注意:requests库发送请求将网页内容下载下来以后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求#安装:pip3installrequest......
  • 详解HTTP 和 HTTPS:差异与应用
    网络安全问题正变得日益重要,而HTTP认识HTTP与HTTPSHTTP的工作原理HTTP,全称超文本传输协议,是用于传递网站信息的协议。当用户在网页上发起一个动作时,比如点击链接,浏览器就启动一个到服务器的请求过程。简化步骤如下:用户发起请求,浏览器编排出一个包涵动作类型(GET、POST服务器接......
  • 如何使用xdebug调试php程序
    1由于我的是phpstudy集成环境,直接找到php.ini的位置:D:\phpstudy_pro\Extensions\php\php7.3.9nts\php.ini在文件尾部直接添加[Xdebug]zend_extension=D:/phpstudy_pro/Extensions/php/php7.0.9nts/ext/php_xdebug.dllxdebug.idekey=phpstormxdebug.remote_enable=Onxde......
  • linux之信号量(四千字长文详解)
    进程通信之信号量(systemV版)信号量的概念信号量的是什么———==本质是一个计数器,通常用来表示公共资源中,资源数量的多少==为什么要有信号量,我们可不可以在我们多进程的环境中,定义一个全局变量,用全局变量整数的方式来让我们不同的进程统计某一种资源呢?——不行因为存在写实拷贝......
  • C 语言用户输入详解:scanf、fgets、内存地址解析及实用指南
    C语言中的用户输入您已经学习了printf()函数用于在C语言中输出值。要获取用户输入,可以使用scanf()函数://声明一个整数变量,用于存储我们从用户那里获得的数字intmyNum;//提示用户输入一个数字printf("请输入一个数字:\n");//获取并保存用户输入的数字scanf("%d"......