PHP学习笔记6——日期和时间

1.常用时间处理方法

1.1 格式化时间显示

date()函数可识别的format参数

在这里插入图片描述

<?php
// 1.格式化时间显示
// 设定要使用的时区
date_default_timezone_set('PRC'); // 东八区

// 输出类似:Monday
echo date("l"); // Tuesday
echo "\n";

// 输出类似:Monday 15th of August 2005 03:12:46 PM
echo date('l dS \of F Y h:i:s A'); // Tuesday 09th of June 2020 11:11:47 PM
echo "\n";

echo "June 9, 2020 is on a ".date("l"); // June 9, 2020 is on a Tuesday
echo "\n";

// 在格式参数中使用常量
echo date(DATE_RFC2822); // Tue, 09 Jun 2020 23:14:21 +0800
echo "\n";

echo date(DATE_ATOM); // 2020-06-09T23:15:06+08:00
echo "\n";

echo date('Y-m-d H:i:s'); // 2020-06-09 23:15:43
?>

1.2 计算两个日期之间的时间差

<?php
// 计算日期时间差需要先把两个日期转换成纪元时间戳后再计算

// 起始时间:2020年6月9日23点20分0秒
$start = mktime(23,20,0,6,9,2020);

// 结束时间:2020年6月18日11点30分0秒
$end = mktime(11, 30, 0, 6, 18, 2020);

$diff_seconds = $end - $start;

// 一周的秒数是:24*60*60 = 604800 秒
$diff_weeks = floor($diff_seconds/604800);

// 一天的秒数是:24*60*60 = 86400 秒
$diff_days = floor($diff_seconds/86400);
$diff_hours = floor($diff_seconds/3600);
$diff_minutes = floor($diff_seconds/60);
echo "2020年6月9日23点20分0秒 和 2020年6月18日11点30分 相差 ". $diff_seconds ."秒," .$diff_weeks ."个星期,". $diff_days ."天,". $diff_hours ."个小时,". $diff_minutes ."分钟";
echo "\n";
echo "$start$end 相差 ". $diff_seconds ."秒," .$diff_weeks ."个星期,". $diff_days ."天,". $diff_hours ."个小时,". $diff_minutes ."分钟";
echo "\n";
echo date('Y-m-d H:i:s', $start)." 和 ".date('Y-m-d H:i:s', $end)." 相差 ". $diff_seconds ."秒," .$diff_weeks ."个星期,". $diff_days ."天,". $diff_hours ."个小时,". $diff_minutes ."分钟";
// 2020年6月9日23点20分0秒 和 2020年6月18日11点30分 相差 735000秒,1个星期,8天,204个小时,12250分钟
// 1591716000 和 1592451000 相差 735000秒,1个星期,8天,204个小时,12250分钟
// 2020-06-09 23:20:00 和 2020-06-18 11:30:00 相差 735000秒,1个星期,8天,204个小时,12250分钟
?>

1.3 从字符串中解析日期时间

<?php
// PHP中通常使用strtotime()函数将任何英文文本的日期时间描述解析成UNIX时间戳。
// .echo中可以用逗号来连接字符串,而且这样的连接方式比直接用逗号要快
echo strtotime("now"), "\n";
echo strtotime("10 June 2020"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 5 minutes 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Friday"), "\n";
// 1591750657
// 1591718400
// 1591837057
// 1592355457
// 1592542959
// 1591804800
// 1591286400
?>

1.4 日期的加减运算

<?php
$start = 'last Wednesday';
$interval = strtotime("$start - 2 days");
echo "现在 \$interval 表示上周的" . date('l', $interval),"\n"; // 现在 $interval 表示上周的Monday
// 如果日期使用时间戳表示,并且时间间隔也可用秒来表示,就可以从时间戳中减去时间间隔
$start = time();
echo date('Y-m-d', $start), "\n"; // 2020-06-10
$interval = 7 * 24 * 3600; // 一周
$end = $start - $interval;
// 日期显示格式为: Y-m-d
echo date('Y-m-d', $end); // 2020-06-03
?>

2. 验证日期

类似2020年6月10日这样的日期对于计算机来说是无效日期,PHP中提供了checkdate()函数来检验日期和时间的有效性。语法格式:

bool checkdate(int $month, int $day, int $year)

其中:

  • $month的取值范围为:1~13
  • $day的值在给定的$month所应该具有的天数范围之内,闰年也考虑进去
  • $year的取值范围为:1~32767
<?php
var_dump(checkdate(6, 31, 2020)); // bool(false)
var_dump(checkdate(6, 10, 2020)); // bool(true)
/**
 * 能被4整除且不能被100整除的为闰年,
 * 能被400整除的也是闰年,
 * 否则是平年
 *
 */
// 2020年是闰年,2月有29天
var_dump(checkdate(2, 29, 2020)); // bool(true)
// 2018年是平年,2月只有28天
var_dump(checkdate(2, 29, 2018)); // bool(false)
?>

猜你喜欢

转载自blog.csdn.net/username666/article/details/106653629