{"id":3034,"date":"2026-02-02T22:46:06","date_gmt":"2026-02-02T14:46:06","guid":{"rendered":"https:\/\/blog.nonot.cn\/?p=3034"},"modified":"2026-02-02T22:46:07","modified_gmt":"2026-02-02T14:46:07","slug":"php%e5%ae%9e%e7%8e%b0%e4%b8%8a%e4%b8%80%e5%91%a8%ef%bc%8c%e4%b8%8an%e5%91%a8%ef%bc%8c%e4%b8%8a%e4%b8%aa%e6%9c%88%ef%bc%8c%e4%b8%8a%e4%b8%aa%e5%ad%a3%e5%ba%a6","status":"publish","type":"post","link":"https:\/\/blog.nonot.cn\/index.php\/2026\/02\/02\/php%e5%ae%9e%e7%8e%b0%e4%b8%8a%e4%b8%80%e5%91%a8%ef%bc%8c%e4%b8%8an%e5%91%a8%ef%bc%8c%e4%b8%8a%e4%b8%aa%e6%9c%88%ef%bc%8c%e4%b8%8a%e4%b8%aa%e5%ad%a3%e5%ba%a6\/","title":{"rendered":"PHP\u5b9e\u73b0\u4e0a\u4e00\u5468\uff0c\u4e0aN\u5468\uff0c\u4e0a\u4e2a\u6708\uff0c\u4e0a\u4e2a\u5b63\u5ea6"},"content":{"rendered":"<div class=\"line number1 index0 alt2\"><code class=\"xml plain\">&lt;?<\/code><code class=\"xml keyword\">php<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"xml plain\">\/**<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* \u4e0aXXX\u65f6\u95f4\u51fd\u6570\uff0c\u7528\u4e8e\u8ba1\u7b97\u4e0a\u4e00\u5468\uff0c\u4e0an\u5468\uff0c\u4e0a\u4e2a\u6708\uff0c\u4e0a\u4e2a\u5b63\u5ea6\u7684\u65f6\u95f4\u70b9\u3002<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">*<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* @author bourneli(\u674e\u4f2f\u97ec)<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* @date 2012-12-18<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">*\/<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"xml plain\">\/**<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* \u83b7\u53d6\u4e0a\u4e2a\u5b63\u5ea6\u7684\u5f00\u59cb\u548c\u7ed3\u675f\u65e5\u671f<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* @param int $ts \u65f6\u95f4\u6233<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* @return array \u7b2c\u4e00\u4e2a\u5143\u7d20\u4e3a\u5f00\u59cb\u65e5\u671f\uff0c\u7b2c\u4e8c\u4e2a\u5143\u7d20\u4e3a\u7ed3\u675f\u65e5\u671f<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">*\/<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"xml plain\">function lastQuarter($ts) {<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$ts = intval($ts);<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$threeMonthAgo = mktime(0, 0, 0, date('n', $ts) - 3, 1, date('Y', $ts));<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$year = date('Y', $threeMonthAgo);<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$month = date('n', $threeMonthAgo);<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$startMonth = intval(($month - 1)\/3)*3 + 1; \/\/ \u4e0a\u5b63\u5ea6\u5f00\u59cb\u6708\u4efd<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$endMonth = $startMonth + 2; \/\/ \u4e0a\u5b63\u5ea6\u7ed3\u675f\u6708\u4efd<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">return array(<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">date('Y-m-1', strtotime($year . \"-{$startMonth}-1\")),<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">date('Y-m-t', strtotime($year . \"-{$endMonth}-1\"))<\/code><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">);<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"xml plain\">}<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"xml plain\">\/**<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* \u83b7\u53d6\u4e0a\u4e2a\u6708\u7684\u5f00\u59cb\u548c\u7ed3\u675f<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* @param int $ts \u65f6\u95f4\u6233<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* @return array \u7b2c\u4e00\u4e2a\u5143\u7d20\u4e3a\u5f00\u59cb\u65e5\u671f\uff0c\u7b2c\u4e8c\u4e2a\u5143\u7d20\u4e3a\u7ed3\u675f\u65e5\u671f<\/code><\/div>\n<div class=\"line number32 index31 alt1\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">*\/<\/code><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"xml plain\">function lastMonth($ts) {<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$ts = intval($ts);<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$oneMonthAgo = mktime(0, 0, 0, date('n', $ts) - 1, 1, date('Y', $ts));<\/code><\/div>\n<div class=\"line number37 index36 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$year = date('Y', $oneMonthAgo);<\/code><\/div>\n<div class=\"line number38 index37 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$month = date('n', $oneMonthAgo);<\/code><\/div>\n<div class=\"line number39 index38 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">return array(<\/code><\/div>\n<div class=\"line number40 index39 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">date('Y-m-1', strtotime($year . \"-{$month}-1\")),<\/code><\/div>\n<div class=\"line number41 index40 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">date('Y-m-t', strtotime($year . \"-{$month}-1\"))<\/code><\/div>\n<div class=\"line number42 index41 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">);<\/code><\/div>\n<div class=\"line number43 index42 alt2\"><code class=\"xml plain\">}<\/code><\/div>\n<div class=\"line number44 index43 alt1\"><\/div>\n<div class=\"line number45 index44 alt2\"><code class=\"xml plain\">\/**<\/code><\/div>\n<div class=\"line number46 index45 alt1\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* \u83b7\u53d6\u4e0an\u5468\u7684\u5f00\u59cb\u548c\u7ed3\u675f\uff0c\u6bcf\u5468\u4ece\u5468\u4e00\u5f00\u59cb\uff0c\u5468\u65e5\u7ed3\u675f\u65e5\u671f<\/code><\/div>\n<div class=\"line number47 index46 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* @param int $ts \u65f6\u95f4\u6233<\/code><\/div>\n<div class=\"line number48 index47 alt1\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* @param int $n \u4f60\u61c2\u7684(\u524d\u591a\u5c11\u5468)<\/code><\/div>\n<div class=\"line number49 index48 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* @param string $format \u9ed8\u8ba4\u4e3a'%Y-%m-%d',\u6bd4\u5982\"2012-12-18\"<\/code><\/div>\n<div class=\"line number50 index49 alt1\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">* @return array \u7b2c\u4e00\u4e2a\u5143\u7d20\u4e3a\u5f00\u59cb\u65e5\u671f\uff0c\u7b2c\u4e8c\u4e2a\u5143\u7d20\u4e3a\u7ed3\u675f\u65e5\u671f<\/code><\/div>\n<div class=\"line number51 index50 alt2\"><code class=\"xml spaces\">\u00a0<\/code><code class=\"xml plain\">*\/<\/code><\/div>\n<div class=\"line number52 index51 alt1\"><code class=\"xml plain\">function lastNWeek($ts, $n, $format = '%Y-%m-%d') {<\/code><\/div>\n<div class=\"line number53 index52 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$ts = intval($ts);<\/code><\/div>\n<div class=\"line number54 index53 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$n\u00a0 = abs(intval($n));<\/code><\/div>\n<div class=\"line number55 index54 alt2\"><\/div>\n<div class=\"line number56 index55 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">\/\/ \u5468\u4e00\u5230\u5468\u65e5\u5206\u522b\u4e3a1-7<\/code><\/div>\n<div class=\"line number57 index56 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$dayOfWeek = date('w', $ts);<\/code><\/div>\n<div class=\"line number58 index57 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">if (0 == $dayOfWeek)<\/code><\/div>\n<div class=\"line number59 index58 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">{<\/code><\/div>\n<div class=\"line number60 index59 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$dayOfWeek = 7;<\/code><\/div>\n<div class=\"line number61 index60 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">}<\/code><\/div>\n<div class=\"line number62 index61 alt1\"><\/div>\n<div class=\"line number63 index62 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$lastNMonday = 7 * $n + $dayOfWeek - 1;<\/code><\/div>\n<div class=\"line number64 index63 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">$lastNSunday = 7 * ($n - 1) + $dayOfWeek;<\/code><\/div>\n<div class=\"line number65 index64 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">return array(<\/code><\/div>\n<div class=\"line number66 index65 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">strftime($format, strtotime(\"-{$lastNMonday} day\", $ts)),<\/code><\/div>\n<div class=\"line number67 index66 alt2\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">strftime($format, strtotime(\"-{$lastNSunday} day\", $ts))<\/code><\/div>\n<div class=\"line number68 index67 alt1\"><code class=\"xml spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"xml plain\">);<\/code><\/div>\n<div class=\"line number69 index68 alt2\"><code class=\"xml plain\">}<\/code><\/div>\n<div class=\"line number70 index69 alt1\"><\/div>\n<div class=\"line number71 index70 alt2\"><code class=\"xml plain\">\/\/---------------------demo---------------------<\/code><\/div>\n<div class=\"line number72 index71 alt1\"><code class=\"xml plain\">$now = strftime('%Y-%m-%d', time());<\/code><\/div>\n<div class=\"line number73 index72 alt2\"><code class=\"xml plain\">echo \"Today: {$now}n\";<\/code><\/div>\n<div class=\"line number74 index73 alt1\"><\/div>\n<div class=\"line number75 index74 alt2\"><code class=\"xml plain\">list($start, $end) = lastNWeek(time(), 1);<\/code><\/div>\n<div class=\"line number76 index75 alt1\"><code class=\"xml plain\">echo \"Last 1 week:\u00a0 {$start} ~ {$end}n\";<\/code><\/div>\n<div class=\"line number77 index76 alt2\"><\/div>\n<div class=\"line number78 index77 alt1\"><code class=\"xml plain\">list($start, $end) = lastNWeek(time(), 2);<\/code><\/div>\n<div class=\"line number79 index78 alt2\"><code class=\"xml plain\">echo \"Last 2 week:\u00a0 {$start} ~ {$end}n\";<\/code><\/div>\n<div class=\"line number80 index79 alt1\"><\/div>\n<div class=\"line number81 index80 alt2\"><code class=\"xml plain\">list($start, $end) = lastNWeek(time(), 3);<\/code><\/div>\n<div class=\"line number82 index81 alt1\"><code class=\"xml plain\">echo \"Last 3 week:\u00a0 {$start} ~ {$end}n\";<\/code><\/div>\n<div class=\"line number83 index82 alt2\"><\/div>\n<div class=\"line number84 index83 alt1\"><code class=\"xml plain\">list($start, $end) = lastMonth(time());<\/code><\/div>\n<div class=\"line number85 index84 alt2\"><code class=\"xml plain\">echo \"Last month:\u00a0\u00a0 {$start} ~ {$end}n\";<\/code><\/div>\n<div class=\"line number86 index85 alt1\"><\/div>\n<div class=\"line number87 index86 alt2\"><code class=\"xml plain\">list($start, $end) = lastQuarter(time());<\/code><\/div>\n<div class=\"line number88 index87 alt1\"><code class=\"xml plain\">echo \"Last quarter: {$start} ~ {$end}n\";<\/code><\/div>\n<div class=\"line number89 index88 alt2\"><\/div>\n<div class=\"line number90 index89 alt1\"><code class=\"xml plain\">?&gt;<\/code>\u6267\u884c\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<p><a href=\"http:\/\/images.cnblogs.com\/cnblogs_com\/bourneli\/201212\/201212181818415524.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3035\" title=\"201212181818413855\" src=\"https:\/\/blog.nonot.cn\/wp-content\/uploads\/replace\/ea25738e26b708e746397085da583a94.png\" alt=\"201212181818413855\" width=\"449\" height=\"143\" \/><\/a><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>&lt;?php \/** \u00a0* \u4e0aXXX\u65f6\u95f4\u51fd\u6570\uff0c\u7528\u4e8e\u8ba1\u7b97\u4e0a&hellip;<\/p>\n","protected":false},"author":1,"featured_media":3036,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3034","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.nonot.cn\/index.php\/wp-json\/wp\/v2\/posts\/3034","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.nonot.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nonot.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nonot.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nonot.cn\/index.php\/wp-json\/wp\/v2\/comments?post=3034"}],"version-history":[{"count":1,"href":"https:\/\/blog.nonot.cn\/index.php\/wp-json\/wp\/v2\/posts\/3034\/revisions"}],"predecessor-version":[{"id":3037,"href":"https:\/\/blog.nonot.cn\/index.php\/wp-json\/wp\/v2\/posts\/3034\/revisions\/3037"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.nonot.cn\/index.php\/wp-json\/wp\/v2\/media\/3036"}],"wp:attachment":[{"href":"https:\/\/blog.nonot.cn\/index.php\/wp-json\/wp\/v2\/media?parent=3034"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nonot.cn\/index.php\/wp-json\/wp\/v2\/categories?post=3034"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nonot.cn\/index.php\/wp-json\/wp\/v2\/tags?post=3034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}