PHP 时间日期处理


PHP 时间日期处理


正文

通过日期获取当周开始结束时间戳

function getWeekStartEndTimeOfDate($date)
{
    if (date("H:i:s", strtotime($date)) != "00:00:00") {
        $date = date("Y-m-d 00:00:00", strtotime($date));
    }

    $w = date("w", strtotime($date));
    $week_start = strtotime("$date - " .($w ? $w - 1 : 6) ." day");
    $week_start_date = date("Y-m-d 23:59:59", $week_start);
    $week_end = strtotime("$week_start_date + 6 day");

    return ["week_start" => $week_start, "week_end" => $week_end];
}

或者

function getWeekStartEndTimeOfDate($date)
{
    if (date("H:i:s", strtotime($date)) != "00:00:00") {
        $date = date("Y-m-d 00:00:00", strtotime($date));
    }

    $w = date("N", strtotime($date)) - 1;
    $week_start = strtotime("$date - " .$w ." day");
    $week_start_date = date("Y-m-d 23:59:59", $week_start);
    $week_end = strtotime("$week_start_date + 6 day");

    return ["week_start" => $week_start, "week_end" => $week_end];
}

strtotime

strtotime() 可以转换字符串为时间戳。

<?php
// 设置时区
date_default_timezone_set("PRC");
$time = strtotime("2018-01-18 08:08:08");  // 将指定日期转成时间戳 
// 打印当前时间  PHP_EOL 换行符,兼容不同系统
echo  $time, PHP_EOL;
 
// 更多实例
echo strtotime("now"), PHP_EOL;
echo strtotime("10 September 2000"), PHP_EOL;
echo strtotime("+1 day"), PHP_EOL;
$now = now();
echo strtotime("$now +1 week"), PHP_EOL;
echo strtotime("+1 week 2 days 4 hours 2 seconds"), PHP_EOL;
echo strtotime("next Thursday"), PHP_EOL;
echo strtotime("last Monday"), PHP_EOL;

date

date() 函数用于格式化时间/日期。

格式字串可以识别以下 format 参数的字符串:

format 字符     说明     返回值例子
日     ---     ---
d     月份中的第几天,有前导零的 2 位数字     01 到 31
D     星期中的第几天,文本表示,3 个字母     Mon 到 Sun
j     月份中的第几天,没有前导零     1 到 31
l("L"的小写字母)     星期几,完整的文本格式     Sunday 到 Saturday
N     ISO-8601 格式数字表示的星期中的第几天(PHP 5.1.0 新加)     1(表示星期一)到 7(表示星期天)
S     每月天数后面的英文后缀,2 个字符     st,nd,rd 或者 th。可以和 j 一起用
w     星期中的第几天,数字表示     0(表示星期天)到 6(表示星期六)
z     年份中的第几天     0 到 365
星期     ---     ---
W     ISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的)     例如:42(当年的第 42 周)
月     ---     ---
F     月份,完整的文本格式,例如 January 或者 March     January 到 December
m     数字表示的月份,有前导零     01 到 12
M     三个字母缩写表示的月份     Jan 到 Dec
n     数字表示的月份,没有前导零     1 到 12
t     给定月份所应有的天数     28 到 31
年     ---     ---
L     是否为闰年     如果是闰年为 1,否则为 0
o     ISO-8601 格式年份数字。这和 Y 的值相同,只除了如果 ISO 的星期数(W)属于前一年或下一年,则用那一年。(PHP 5.1.0 新加)     Examples: 1999 or 2003
Y     4 位数字完整表示的年份     例如:1999 或 2003
y     2 位数字表示的年份     例如:99 或 03
时间     ---     ---
a     小写的上午和下午值     am 或 pm
A     大写的上午和下午值     AM 或 PM
B     Swatch Internet 标准时     000 到 999
g     小时,12 小时格式,没有前导零     1 到 12
G     小时,24 小时格式,没有前导零     0 到 23
h     小时,12 小时格式,有前导零     01 到 12
H     小时,24 小时格式,有前导零     00 到 23
i     有前导零的分钟数     00 到 59>
s     秒数,有前导零     00 到 59>
u     毫秒 (PHP 5.2.2 新加)。需要注意的是 date() 函数总是返回 000000 因为它只接受 integer 参数, 而 DateTime::format() 才支持毫秒。     示例: 654321
时区     ---     ---
e     时区标识(PHP 5.1.0 新加)     例如:UTC,GMT,Atlantic/Azores
I     是否为夏令时     如果是夏令时为 1,否则为 0
O     与格林威治时间相差的小时数     例如:+0200
P     与格林威治时间(GMT)的差别,小时和分钟之间有冒号分隔(PHP 5.1.3 新加)     例如:+02:00
T     本机所在的时区     例如:EST,MDT(【译者注】在 Windows 下为完整文本格式,例如"Eastern Standard Time",中文版会显示"中国标准时间")。
Z     时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。     -43200 到 43200
完整的日期/时间     ---     ---
c     ISO 8601 格式的日期(PHP 5 新加)     2004-02-12T15:19:21+00:00
r     RFC 822 格式的日期     例如:Thu, 21 Dec 2000 16:01:07 +0200
U     从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数     参见 time()

Date/Time一览

安装:PHP Date/Time 函数是PHP 核心的组成部分。无需安装即可使用这些函数。

Runtime 配置,Date/Time 函数的行为受到 php.ini 中设置的影响:

名称     描述     默认     PHP 版本
date.timezone     规定默认时区(所有的 Date/Time 函数使用该选项)     ""     PHP 5.1
date.default_latitude     规定默认纬度(date_sunrise() 和 date_sunset() 使用该选项)     "31.7667"     PHP 5.0
date.default_longitude     规定默认经度(date_sunrise() 和 date_sunset() 使用该选项)     "35.2333"     PHP 5.0
date.sunrise_zenith     规定默认日出天顶(date_sunrise() 和 date_sunset() 使用该选项)     "90.83"     PHP 5.0
date.sunset_zenith     规定默认日落天顶(date_sunrise() 和 date_sunset() 使用该选项)     "90.83"     PHP 5.0

Date/Time 函数:

函数     描述
checkdate()     验证格利高里日期。
date_add()     添加日、月、年、时、分和秒到一个日期。
date_create_from_format()     返回一个根据指定格式进行格式化的新的 DateTime 对象。
date_create()     返回一个新的 DateTime 对象。
date_date_set()     设置一个新的日期。
date_default_timezone_get()     返回默认时区,被所有的 Date/Time 函数使用。
date_default_timezone_set()     设置默认时区,被所有的 Date/Time 函数使用。
date_diff()     返回两个日期间的差值。
date_format()     返回根据指定格式进行格式化的日期。
date_get_last_errors()     返回日期字符串中的警告/错误。
date_interval_create_from_date_string()     从字符串的相关部分建立一个 DateInterval。
date_interval_format()     格式化时间间隔。
date_isodate_set()     设置 ISO 日期。
date_modify()     修改时间戳。
date_offset_get()     返回时区偏移。
date_parse_from_format()     根据指定的格式返回一个带有指定日期的详细信息的关联数组。
date_parse()     返回一个带有指定日期的详细信息的关联数组。
date_sub()     从指定日期减去日、月、年、时、分和秒。
date_sun_info()     返回一个包含有关指定日期与地点的日出/日落和黄昏开始/黄昏结束的信息的数组。
date_sunrise()     返回指定日期与地点的日出时间。
date_sunset()     返回指定日期与地点的日落时间。
date_time_set()     设置时间。
date_timestamp_get()     返回 Unix 时间戳。
date_timestamp_set()     设置基于 Unix 时间戳的日期和时间。
date_timezone_get()     返回给定 DateTime 对象的时区。
date_timezone_set()     设置 DateTime 对象的时区。
date()     格式化本地日期和时间。
getdate()     返回某个时间戳或者当前本地的日期/时间的日期/时间信息。
gettimeofday()     返回当前时间。
gmdate()     格式化 GMT/UTC 日期和时间。
gmmktime()     返回 GMT 日期的 UNIX 时间戳。
gmstrftime()     根据区域设置格式化 GMT/UTC 日期和时间。
idate()     格式化本地时间/日期为整数。
localtime()     返回本地时间。
microtime()     返回当前 Unix 时间戳的微秒数。
mktime()     返回一个日期的 Unix 时间戳。
strftime()     根据区域设置格式化本地时间/日期。
strptime()     解析由 strftime() 生成的时间/日期。
strtotime()     将任何英文文本的日期或时间描述解析为 Unix 时间戳。
time()     返回当前时间的 Unix 时间戳。
timezone_abbreviations_list()     返回包含夏令时、偏移量和时区名称的关联数组。
timezone_identifiers_list()     返回带有所有时区标识符的数值数组。
timezone_location_get()     返回指定时区的位置信息。
timezone_name_from_ abbr()     根据时区缩略语返回时区名称。
timezone_name_get()     返回时区的名称。
timezone_offset_get()     返回相对于 GMT 的时区偏移。
timezone_open()     创建一个新的 DateTimeZone 对象。
timezone_transitions_get()     返回时区的所有转换。
timezone_version_get()     返回时区数据库的版本。

PHP 5 预定义的 Date/Time 常量:

常量     描述
DATE_ATOM     Atom (例如:2005-08-15T16:13:03+0000)
DATE_COOKIE     HTTP Cookies (例如:Sun, 14 Aug 2005 16:13:03 UTC)
DATE_ISO8601     ISO-8601 (例如:2005-08-14T16:13:03+0000)
DATE_RFC822     RFC 822 (例如:Sun, 14 Aug 2005 16:13:03 UTC)
DATE_RFC850     RFC 850 (例如:Sunday, 14-Aug-05 16:13:03 UTC)
DATE_RFC1036     RFC 1036 (例如:Sunday, 14-Aug-05 16:13:03 UTC)
DATE_RFC1123     RFC 1123 (例如:Sun, 14 Aug 2005 16:13:03 UTC)
DATE_RFC2822     RFC 2822 (例如:Sun, 14 Aug 2005 16:13:03 +0000)
DATE_RSS     RSS (例如:Sun, 14 Aug 2005 16:13:03 UTC)
DATE_W3C     万维网联盟 (例如:2005-08-14T16:13:03+0000)

函数原型

/**
 * Return current Unix timestamp
 * @link https://php.net/manual/en/function.time.php
 * @return int <p>Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).</p>
 */
function time () {}

/**
 * Parse about any English textual datetime description into a Unix timestamp
 * @link https://php.net/manual/en/function.strtotime.php
 * @param string $datetime <p>
 * The string to parse. Before PHP 5.0.0, microseconds weren't allowed in
 * the time, since PHP 5.0.0 they are allowed but ignored.
 * </p>
 * @param int $baseTimestamp [optional] <p>
 * Default value: now()
 * The timestamp which is used as a base for the calculation of relative
 * dates.
 * </p>
 * @return int|false a timestamp on success, false otherwise. Previous to PHP 5.1.0,
 * this function would return -1 on failure.
 */
#[Pure]
function strtotime ($datetime, $baseTimestamp) {}

/**
 * Format a local time/date
 * @link https://php.net/manual/en/function.date.php
 * @param string $format <p>
 * The format of the outputted date string. See the formatting
 * options below. There are also several
 * predefined date constants
 * that may be used instead, so for example DATE_RSS
 * contains the format string 'D, d M Y H:i:s'.
 * </p>
 * <p>
 * The following characters are recognized in the
 * format parameter string
 * <table>
 * <tr valign="top">
 * <td>format character</td>
 * <td>Description</td>
 * <td>Example returned values</td>
 * </tr>
 * <tr valign="top">
 * Day</td>
 * <td>---</td>
 * <td>---</td>
 * </tr>
 * <tr valign="top">
 * <td>d</td>
 * <td>Day of the month, 2 digits with leading zeros</td>
 * <td>01 to 31</td>
 * </tr>
 * <tr valign="top">
 * <td>D</td>
 * <td>A textual representation of a day, three letters</td>
 * <td>Mon through Sun</td>
 * </tr>
 * <tr valign="top">
 * <td>j</td>
 * <td>Day of the month without leading zeros</td>
 * <td>1 to 31</td>
 * </tr>
 * <tr valign="top">
 * <td>l (lowercase 'L')</td>
 * <td>A full textual representation of the day of the week</td>
 * <td>Sunday through Saturday</td>
 * </tr>
 * <tr valign="top">
 * <td>N</td>
 * <td>ISO-8601 numeric representation of the day of the week (added in
 * PHP 5.1.0)</td>
 * <td>1 (for Monday) through 7 (for Sunday)</td>
 * </tr>
 * <tr valign="top">
 * <td>S</td>
 * <td>English ordinal suffix for the day of the month, 2 characters</td>
 * <td>
 * st, nd, rd or
 * th. Works well with j
 * </td>
 * </tr>
 * <tr valign="top">
 * <td>w</td>
 * <td>Numeric representation of the day of the week</td>
 * <td>0 (for Sunday) through 6 (for Saturday)</td>
 * </tr>
 * <tr valign="top">
 * <td>z</td>
 * <td>The day of the year (starting from 0)</td>
 * <td>0 through 365</td>
 * </tr>
 * <tr valign="top">
 * Week</td>
 * <td>---</td>
 * <td>---</td>
 * </tr>
 * <tr valign="top">
 * <td>W</td>
 * <td>ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0)</td>
 * <td>Example: 42 (the 42nd week in the year)</td>
 * </tr>
 * <tr valign="top">
 * Month</td>
 * <td>---</td>
 * <td>---</td>
 * </tr>
 * <tr valign="top">
 * <td>F</td>
 * <td>A full textual representation of a month, such as January or March</td>
 * <td>January through December</td>
 * </tr>
 * <tr valign="top">
 * <td>m</td>
 * <td>Numeric representation of a month, with leading zeros</td>
 * <td>01 through 12</td>
 * </tr>
 * <tr valign="top">
 * <td>M</td>
 * <td>A short textual representation of a month, three letters</td>
 * <td>Jan through Dec</td>
 * </tr>
 * <tr valign="top">
 * <td>n</td>
 * <td>Numeric representation of a month, without leading zeros</td>
 * <td>1 through 12</td>
 * </tr>
 * <tr valign="top">
 * <td>t</td>
 * <td>Number of days in the given month</td>
 * <td>28 through 31</td>
 * </tr>
 * <tr valign="top">
 * Year</td>
 * <td>---</td>
 * <td>---</td>
 * </tr>
 * <tr valign="top">
 * <td>L</td>
 * <td>Whether it's a leap year</td>
 * <td>1 if it is a leap year, 0 otherwise.</td>
 * </tr>
 * <tr valign="top">
 * <td>o</td>
 * <td>ISO-8601 year number. This has the same value as
 * Y, except that if the ISO week number
 * (W) belongs to the previous or next year, that year
 * is used instead. (added in PHP 5.1.0)</td>
 * <td>Examples: 1999 or 2003</td>
 * </tr>
 * <tr valign="top">
 * <td>Y</td>
 * <td>A full numeric representation of a year, 4 digits</td>
 * <td>Examples: 1999 or 2003</td>
 * </tr>
 * <tr valign="top">
 * <td>y</td>
 * <td>A two digit representation of a year</td>
 * <td>Examples: 99 or 03</td>
 * </tr>
 * <tr valign="top">
 * Time</td>
 * <td>---</td>
 * <td>---</td>
 * </tr>
 * <tr valign="top">
 * <td>a</td>
 * <td>Lowercase Ante meridiem and Post meridiem</td>
 * <td>am or pm</td>
 * </tr>
 * <tr valign="top">
 * <td>A</td>
 * <td>Uppercase Ante meridiem and Post meridiem</td>
 * <td>AM or PM</td>
 * </tr>
 * <tr valign="top">
 * <td>B</td>
 * <td>Swatch Internet time</td>
 * <td>000 through 999</td>
 * </tr>
 * <tr valign="top">
 * <td>g</td>
 * <td>12-hour format of an hour without leading zeros</td>
 * <td>1 through 12</td>
 * </tr>
 * <tr valign="top">
 * <td>G</td>
 * <td>24-hour format of an hour without leading zeros</td>
 * <td>0 through 23</td>
 * </tr>
 * <tr valign="top">
 * <td>h</td>
 * <td>12-hour format of an hour with leading zeros</td>
 * <td>01 through 12</td>
 * </tr>
 * <tr valign="top">
 * <td>H</td>
 * <td>24-hour format of an hour with leading zeros</td>
 * <td>00 through 23</td>
 * </tr>
 * <tr valign="top">
 * <td>i</td>
 * <td>Minutes with leading zeros</td>
 * <td>00 to 59</td>
 * </tr>
 * <tr valign="top">
 * <td>s</td>
 * <td>Seconds, with leading zeros</td>
 * <td>00 through 59</td>
 * </tr>
 * <tr valign="top">
 * <td>u</td>
 * <td>Microseconds (added in PHP 5.2.2)</td>
 * <td>Example: 654321</td>
 * </tr>
 * <tr valign="top">
 * Timezone</td>
 * <td>---</td>
 * <td>---</td>
 * </tr>
 * <tr valign="top">
 * <td>e</td>
 * <td>Timezone identifier (added in PHP 5.1.0)</td>
 * <td>Examples: UTC, GMT, Atlantic/Azores</td>
 * </tr>
 * <tr valign="top">
 * <td>I (capital i)</td>
 * <td>Whether or not the date is in daylight saving time</td>
 * <td>1 if Daylight Saving Time, 0 otherwise.</td>
 * </tr>
 * <tr valign="top">
 * <td>O</td>
 * <td>Difference to Greenwich time (GMT) in hours</td>
 * <td>Example: +0200</td>
 * </tr>
 * <tr valign="top">
 * <td>P</td>
 * <td>Difference to Greenwich time (GMT) with colon between hours and minutes (added in PHP 5.1.3)</td>
 * <td>Example: +02:00</td>
 * </tr>
 * <tr valign="top">
 * <td>T</td>
 * <td>Timezone abbreviation</td>
 * <td>Examples: EST, MDT ...</td>
 * </tr>
 * <tr valign="top">
 * <td>Z</td>
 * <td>Timezone offset in seconds. The offset for timezones west of UTC is always
 * negative, and for those east of UTC is always positive.</td>
 * <td>-43200 through 50400</td>
 * </tr>
 * <tr valign="top">
 * Full Date/Time</td>
 * <td>---</td>
 * <td>---</td>
 * </tr>
 * <tr valign="top">
 * <td>c</td>
 * <td>ISO 8601 date (added in PHP 5)</td>
 * <td>2004-02-12T15:19:21+00:00</td>
 * </tr>
 * <tr valign="top">
 * <td>r</td>
 * <td>RFC 2822 formatted date</td>
 * <td>Example: Thu, 21 Dec 2000 16:01:07 +0200</td>
 * </tr>
 * <tr valign="top">
 * <td>U</td>
 * <td>Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)</td>
 * <td>See also time</td>
 * </tr>
 * </table>
 * </p>
 * <p>
 * Unrecognized characters in the format string will be printed
 * as-is. The Z format will always return
 * 0 when using gmdate.
 * </p>
 * <p>
 * Since this function only accepts integer timestamps the
 * u format character is only useful when using the
 * date_format function with user based timestamps
 * created with date_create.
 * </p>
 * @param int $timestamp [optional] Default value: now(). The optional timestamp parameter is an integer Unix timestamp
 * that defaults to the current local time if a timestamp is not given.
 * @return string|false a formatted date string. If a non-numeric value is used for
 * timestamp, false is returned and an
 * E_WARNING level error is emitted.
 */
#[Pure]
function date ($format, $timestamp) {}

参考资料

PHP strtotime() 函数 https://www.runoob.com/php/func-date-strtotime.html

PHP date() 函数 https://www.runoob.com/php/php-date.html


返回