• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

在PHP中格式化当前日期和时间

在开发网站时,您经常需要使用日期和时间。例如,您可能需要在帖子上显示上次修改日期或提及读者多久以前写过一些评论。您可能还必须显示特殊事件之前的倒计时天数。

在PHP中格式化当前日期和时间  第1张

幸运的是,php 带有一些内置的日期和时间函数,它们将帮助我们更轻松地完成所有这些工作。

本教程将教您如何在 PHP 中格式化当前日期和时间。您还将学习如何从日期字符串中获取时间戳以及如何添加和减去不同的日期。

以字符串格式获取日期和时间

date($format, $timestamp)是 PHP 中最常用的日期和时间函数之一。它将所需的日期输出格式作为第一个参数,将整数作为时间戳值,需要将其转换为给定的日期格式。第二个参数是可选的,省略它将根据 的值以字符串格式输出当前日期和时间$format。

该 $format 参数接受一系列字符作为有效值。其中一些字符具有直接的含义: Y 用 4 位数字 (2018) 为您提供年份的完整数字表示,并且 y 只为您提供当前年份的最后两位数字 (18)。同样, H 将为您提供带前导零的 24 小时格式的小时,但 h 将为您提供带前导零的 12 小时格式的小时。

以下是一些最常见的日期格式字符及其值。

特点意义例子
d带前导零的月份中的一天03 或 17
j没有前导零的月份中的某天3 或 17
D星期几作为三个字母的缩写星期一
l一周中的全天周一
m月份为前导零的数字09 或 12
n月份为不带前导零的数字9 或 12
M月份作为三个字母的缩写九月
F整月九月
y两位数年份18
Y全年2018

还有许多其他特殊字符来指定 date() 函数的输出。最好查阅函数文档中的 格式字符表 以 date() 获取有关特殊情况的更多信息。

现在让我们看一些该 date() 函数的实际示例。我们可以使用它来获取当前年份、当前月份、当前小时等,也可以使用它来获取完整的日期字符串。

<?php

// Output — 2018
echo date('Y');

// Output — September 2018
echo date('F Y');

// Output — 13 September, 2018
echo date('d F, Y');

// Output — 13 September, 2018 (Thursday)
echo date('d F, Y (l)');

您还可以使用该 date() 功能来输出时间。以下是一些最常用的时间格式字符:

特点意义例子
g12 小时格式的小时数,不带前导零1 或 12
h带前导零的 12 小时格式的小时数01 或 12
G没有前导零的 24 小时格式的小时数1 或 13
H带前导零的 24 小时格式的小时数01 或 13
aam/pm 小写
A大写的上午/下午
i带前导零的分钟09 或 15
s带前导零的秒数05 或 30

以下是一些输出格式化时间字符串的示例。

// Output — 11:03:37 AM
echo date('h:i:s A');

// Output — Thursday, 11:04:09 AM
echo date('l, h:i:s A');

// Output — 13 September 2018, 11:05:00 AM
echo date('d F Y, h:i:s A');

?>

如果您想在日期字符串中使用这些特殊字符,转义这些特殊字符也很重要。

<?php

// Output — CEST201813am18 1115 Thursday.
echo date('Today is l.');

// Output — Today is Thursday.
echo date('\T\o\d\a\y \i\s l.');

// Output — Today is Thursday.
echo 'Today is '.date('l.');

?>

获取 Unix 时间戳

有时,您需要在 PHP 中获取当前 Unix 时间戳的值。借助该 time() 功能,这非常容易。它返回一个整数值,该值描述自 1970 年 1 月 1 日格林威治标准时间午夜 (00:00:00) 以来经过的毫秒数。

您也可以使用此功能来回及时。为此,您所要做的就是从当前值中减去正确的秒数, time() 然后将结果值更改为所需的日期字符串。这里有两个例子:

<?php

$ten_days_later = time() + 10*60*60*24;
// Output — It will be Sunday 10 days later.
echo 'It will be '.date('l', $ten_days_later).' 10 days later.';

$ten_days_ago = time() - 10*60*60*24;
// Output — It was Monday 10 days ago.
echo 'It was '.date('l', $ten_days_ago).' 10 days ago.';

?>

您应该记住的一件重要事情是,返回的时间戳值与 time() 时区无关,它获取自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。这意味着在特定时间点,此函数将在美国、欧洲、印度或日本返回相同的值。

另一种获取特定日期时间戳的方法是使用该 mktime($hour, $minute, $second, $month, $day, $year) 函数。当省略所有参数时,该函数仅使用当前本地日期和时间来计算时间戳值。此函数还可用于 date() 生成有用的日期和时间字符串。

<?php

$some_time = mktime(1, 1, 1, 12, 3, 1994);
// Output — It was Saturday on 03 December, 1994.
echo 'It was '.date('l', $some_time).' on '.date('d F, Y', $some_time).'.';

?>

基本上, time() 可以用来来回去一段时间,而 mktime() 当你想去一个特定的时间点时很有用。

将日期时间字符串转换为时间戳

strtotime($time, [$now = time()]) 当您要将字符串格式的不同日期和时间值转换为时间戳时,该 函数将非常有用。该函数可以将几乎所有类型的日期时间字符串解析为时间戳。

您绝对应该检查有效的 时间格式、 日期格式、 复合日期时间格式和 相对日期时间格式。

使用相对日期时间格式,此函数可以轻松地将常用字符串转换为有效的时间戳值。下面的例子应该清楚地说明:

<?php

$some_time = strtotime("10 months 15 days 10 hours ago");
// Output — It was Sunday on 29 October, 2017 03:16:46.
echo 'It was '.date('l', $some_time).' on '.date('d F, Y h:i:s', $some_time).'.';

$some_time = strtotime("next month");
// Output — It is Saturday on 13 October, 2018 01:18:05.
echo 'It is '.date('l', $some_time).' on '.date('d F, Y h:i:s', $some_time).'.';

$some_time = strtotime("third monday");
// Output — Date on the third monday from now will be 01 October, 2018.
echo 'Date on the third monday from now will be '.date('d F, Y', $some_time).'.';

$some_time = strtotime("last day of November 2021");
// Output — Last day of November 2021 will be Tuesday.
echo 'Last day of November 2021 will be '.date('l', $some_time).'.';

?>

添加、减去和比较日期

可以在日期之间添加和减去特定的时间段。这可以在 date_add() 和 date_sub() 函数的帮助下完成。您还可以使用该 date_diff() 函数将两个日期相减,并以年、月、日或其他形式输出它们之间的差异。

通常,使用类以面向对象的样式执行任何此类与日期和时间相关的算术比 DateTime 程序上执行更容易。我们将在这里尝试这两种风格,您可以选择最喜欢的风格。

<?php

$present = date_create('now');
$future = date_create('last day of January 2024');
$interval = date_diff($present, $future);
// Output — 05 years, 04 months and 17 days
echo $interval->format('%Y years, %M months and %d days');

$present = new DateTime('now');
$future = new DateTime('last day of January 2024');
$interval = $present->diff($future);
// Output — 05 years, 04 months and 17 days
echo $interval->format('%Y years, %M months and %d days');

?>

使用时 DateTime::diff(), 从 传递给方法的对象中 DateTime 减去 diff() 调用方法的 对象 。当您编写程序样式代码时,从第二个日期参数中减去第一个日期参数。DateTimediff()

函数和方法都返回一个 DateInterval() 表示两个日期之间差异的对象。format() 可以使用方法文档中列出的所有字符来格式化此间隔以提供特定的输出 。

当减去或增加时间间隔时,面向对象风格和程序风格之间的差异变得更加明显。

您可以使用const ructor实例化一个新 DateTime 对象 。同样,您可以 使用 构造函数实例化一个 对象 。它接受一个字符串作为它的参数。间隔字符串以 开头 ,表示句点。之后,您可以使用整数值和分配给特定期间的字符来指定每个期间。您应该查看  文档 以获取更多详细信息。DateTime() DateIntervalDateInterval()PDateInterval

这是一个示例,说明在 PHP 中添加或减去日期和时间是多么容易。

<?php

$now = new DateTime('now');
$the_interval = new DateInterval('P20Y5M20D');
$now->add($the_interval);

// Output — It will be Saturday, 05 March, 2039 after 20 years, 05 months and 20 days from today.
echo 'It will be '.$now->format('l, d F, Y').' after '.$the_interval->format("%Y years, %M months and %d days").' from today.';

$now = date_create('now');
$the_interval = date_interval_create_from_date_string('20 years 05 months 20 days');
date_add($now, $the_interval);

// Output — It will be Saturday, 05 March, 2039 after 20 years, 05 months and 20 days from today.
echo 'It will be '.$now->format('l, d F, Y').' after '.$the_interval->format("%Y years, %M months and %d days").' from today.';

?>

您还可以使用比较运算符比较 PHP 中的日期。这可以时不时地派上用场。让我们使用比较运算符和其他 DateTime 方法创建一个圣诞节计数器。

<?php

$now = new DateTime('today');
$christmas = new DateTime('25 December 2018');

while($now > $christmas) {
    $christmas->add(new DateInterval('P1Y'));
}

if($now < $christmas) {
    $interval = $now->diff($christmas);
    echo $interval->format('%a days').' until Christmas!';
}

if($now == $christmas) {
    echo 'Merry Christmas :)';
}

// Output — 103 days until Christmas!

?>

我们首先创建了两个 DateTime 对象来存储今年圣诞节的当前时间和日期。之后,我们运行一个 while 循环,将 2018 年的圣诞节日期持续增加 1 年,直到当前日期小于圣诞节日期。当代码在 2024 年 1 月 18 日运行时,这将很有帮助。只要圣诞节日期小于运行此脚本时的当前日期,while 循环就会增加圣诞节日期。

我们的圣诞节柜台现在可以正常工作几十年,没有任何问题。

date() 关于PHP 的常见问题 

有一些关于从 date() PHP 中的函数中获取不同类型的信息的常见问题,这些问题时不时出现。我们将尝试在这里回答所有问题。

如何在 PHP 中获取当前年份?

您可以使用 date('y') 或 获取 PHP 中的当前年份date('Y')。使用 ac api tal  Y将为您提供当前年份的所有数字,例如2021。使用小的 y只会给你最后两位数字,比如21。

<?php

echo date('Y');
// 2021

echo date('y');
// 21

?>

在 PHP 中获取当前月份的正确方法是什么?

在 PHP 中有四种不同的字符用于获取当前月份,具体取决于您想要的格式。您可以使用大写字母F来获取月份的全名,例如 February ,或者使用M来获取较短的三字母格式的月份。

您还可以使用 m 和 n以数字形式获取当前月份,这将分别为您提供带前导零和不带前导零的月份。

<?php

echo date('F');
// February

echo date('M');
// Feb

echo date('m');
// 02

echo date('n');
//  2

?>

如何在 PHP 中获取星期几?

您还可以通过使用四个不同的字符在 PHP 中获取星期几。大写 字母D将为您提供一周中星期几的三个字母表示,例如Mon 或 Tue。使用l  (小写 L)将为您提供星期几的全名。

您可以使用w 获得一周中各天的 0  (星期日)和 6 (星期六)之间的数值 。

<?php

echo date('D');
// Fri

echo date('l');
// Friday

?>

如何在 PHP 中以 12 小时格式获取当前时间?

您可以使用g 或 h以 12 小时格式获取当前时间。使用 g,您将获得没有任何前导零的时间,而h 将添加一些前导零。可以使用 a  (小写字母)或 A  (大写字母)添加 AM 或 PM。

<?php

echo date('g:i:s a');
// 5:05:19 am

echo date('h:i:s A');
// 05:05:19 AM

?>

我可以在 PHP 中以 24 小时格式获取当前时间吗?

使用字符 G 和 H将为您提供 24 小时格式的当前时间。G不会得到任何前导零,但H 会添加前导零。

<?php

echo date('G:i:s');
// 15:06:48

?>

以日期格式转义字符的最佳方法是什么?

该 date()函数接受一个字符串作为其参数,但许多字符具有明确定义的含义,例如Y 表示年份和 F表示月份。这意味着直接使用这些字符作为字符串的一部分可能并不总是有预期的结果。

如果你想让 date() 函数输出这些字符,那么你必须先将它们转义。这是一个例子:

<?php

echo 'Today is '.date("l the jS of F Y");
// Today is Friday 2804Europe/Berlin 19th 2021f February 2021

echo 'Today is '.date("l \\t\h\\e jS \of F Y");
// Today is Friday the 19th of February 2021

?>

一些字符,如t,需要两个反斜杠,因为\t 用于制表符。如果可能的话,建议将要回显的常规字符串放在 外面 date()。否则,您将转义很多字符。

最后的想法

在本教程中,我们学习了如何使用该 date() 函数以所需格式输出当前日期和时间。我们还看到, date() 也可以用来获取当前的年份、月份等。之后,我们学习了如何获取当前时间戳或将有效 DateTime 字符串转换为时间戳。最后,我们学习了如何从不同的日期添加或减去一段时间。


文章目录
  • 以字符串格式获取日期和时间
  • 获取 Unix 时间戳
  • 将日期时间字符串转换为时间戳
  • 添加、减去和比较日期
  • date() 关于PHP 的常见问题
    • 如何在 PHP 中获取当前年份?
    • 在 PHP 中获取当前月份的正确方法是什么?
    • 如何在 PHP 中获取星期几?
    • 如何在 PHP 中以 12 小时格式获取当前时间?
    • 我可以在 PHP 中以 24 小时格式获取当前时间吗?
    • 以日期格式转义字符的最佳方法是什么?
  • 最后的想法