웹사이트를 개발할 때 날짜와 시간을 다루는 작업이 필요한 경우가 많습니다. 예를 들어 게시물이 마지막으로 수정된 날짜를 표시하거나 독자가 댓글을 남긴 시점을 언급할 수 있습니다. 특별한 이벤트가 발생할 때까지 카운트다운을 표시할 수도 있습니다.
다행히도 PHP에는 이 모든 작업을 쉽게 수행하는 데 도움이 되는 날짜 및 시간 기능이 내장되어 있습니다.
이 튜토리얼에서는 PHP에서 현재 날짜와 시간의 형식을 지정하는 방법을 알려드립니다. 또한 날짜 문자열에서 타임스탬프를 가져오는 방법과 다른 날짜를 더하고 빼는 방법도 알아봅니다.
date($format, $timestamp)
是 PHP 中最常用的日期和时间函数之一。它将所需的日期输出格式作为第一个参数,并将整数作为时间戳值,需要将其转换为给定的日期格式。第二个参数是可选的,省略它会根据 $format
값은 현재 날짜와 시간을 문자열 형식으로 출력합니다.
$format
参数接受一系列字符作为有效值。其中一些字符具有简单的含义:Y
为您提供 4 位年份的完整数字表示形式 (2018),而 y
只为您提供年份的最后两位数字今年 (18)。同样,H
将以 24 小时格式显示小时,并带有前导零,但 h
앞에 0이 붙고 12시간 형식으로 시간이 표시됩니다.
다음은 가장 일반적인 날짜 형식 문자와 해당 값 중 일부입니다.
캐릭터 | 의미 | 예 |
---|---|---|
D |
월의 날짜(앞에 0이 붙음) | 03 또는 17 |
j |
앞에 0이 없는 날짜 | 3 또는 17 |
D |
세 글자 약어로 표현되는 요일 | 월요일 |
l |
요일 | 월요일 |
M |
월은 앞에 0이 붙은 숫자입니다 | 09 또는 12 |
n |
월은 앞에 0이 없는 숫자입니다 | 9 또는 12 |
M |
월을 3글자로 표현 | 9월 |
F |
한달 내내 | 9월 |
Y |
두자리 연도 | 18 |
Y |
연중 | 2018 |
지정할 수 있는 다른 특수 문자도 많이 있습니다. date()
函数的输出。最好查阅 date()
특수한 경우에 대한 자세한 내용은 함수 문서의 형식 문자 표를 참조하세요.
이제 date()
함수의 몇 가지 실제 예를 살펴보겠습니다. 이를 사용하여 현재 연도, 현재 월, 현재 시간 등을 얻을 수 있습니다. 또한 이를 사용하여 전체 날짜 문자열을 얻을 수도 있습니다.
date()
기능을 사용하여 시간을 출력할 수도 있습니다. 다음은 가장 일반적으로 사용되는 시간 형식 문자 중 일부입니다.
캐릭터 | 의미 | 예 |
---|---|---|
G |
앞에 0이 붙지 않는 12시간 형식의 시간 | 1 또는 12 |
H |
앞에 0이 붙은 12시간 형식의 시간 | 01 또는 12 |
G |
앞에 0이 없는 24시간 형식의 시간 | 1 또는 13 |
H |
앞에 0이 붙은 24시간 형식의 시간 | 01 또는 13 |
A |
am/pm 소문자 | 아침 |
A |
오전/오후는 대문자로 시작 | 아침 |
i |
분 앞에 0이 붙습니다 | 09 또는 15 |
s |
앞에 0이 붙은 초 | 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.'); ?>
有时,您需要在 PHP 中获取当前 Unix 时间戳的值。借助 time()
函数,这非常容易。它返回一个整数值,描述自 1970 年 1 月 1 日午夜 (00:00:00) GMT 以来经过的毫秒数。
您还可以使用此功能来回返回时间。为此,您所要做的就是从 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, $min, $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()
时,会从调用 diff()
方法的 DateTime
对象中减去DateTime
对象,该对象传递给 diff()
方法。当您编写过程样式代码时,将从第二个日期参数中减去第一个日期参数。
该函数和方法都返回一个 DateInterval()
对象,表示两个日期之间的差异。可以使用 format()
方法文档中列出的所有字符来格式化此间隔以提供特定输出。
当减去或增加时间间隔时,面向对象风格和过程风格之间的差异变得更加明显。
您可以使用 DateTime()
构造函数实例化新的 DateTime
对象。同样,您可以使用 DateInterval()
构造函数实例化 DateInterval
对象。它接受一个字符串作为其参数。间隔字符串以 P
开头,表示句点。之后,您可以使用整数值和分配给特定句点的字符来指定每个句点。您应该查看 DateInterval
文档以了解更多详细信息。
下面的示例说明了在 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()
函数获取不同类型的信息,时不时会出现一些常见问题。我们将尽力在这里回答所有问题。
您可以使用 date('y')
或 date('Y')
获取 PHP 中的当前年份。使用大写字母 Y 将为您提供当前年份的所有数字,例如 2021。使用小y只会给出最后两位数字,例如21。
<?php echo date('Y'); // 2021 echo date('y'); // 21 ?>
在 PHP 中,有四种不同的字符用于获取当前月份,具体取决于您想要的格式。您可以使用大写字母 F 获取月份的完整名称,例如 February,或者使用 M 获取较短的三字母格式的月份。
您还可以使用m和n以数字形式获取当前月份,这将分别为您提供带前导零和不带前导零的月份。
<?php echo date('F'); // February echo date('M'); // Feb echo date('m'); // 02 echo date('n'); // 2 ?>
您还可以通过使用四个不同的字符来获取 PHP 中的星期几。大写字母 D 将用三个字母表示一周中的某一天,例如 Mon 或 Tue。使用 l(小写 L)将为您提供一周中某一天的全名。
您可以使用 w 获取一周中各天的 0(星期日)和 6(星期六)之间的数值>.
<?php echo date('D'); // Fri echo date('l'); // Friday ?>
您可以使用 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 ?>
使用字符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
字符串转换为时间戳。最后,我们学习了如何从不同的日期中添加或减去一段时间。
我尝试在此处介绍关键的 DateTime
函数和方法。您绝对应该查看文档以了解本教程中未涵盖的功能。如果您有任何疑问,请随时在评论中告诉我。
위 내용은 PHP의 날짜 및 시간 형식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!