正文
通过日期获取当周开始结束时间戳
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