前言:
而今咱们对“php获取月份第一天”大概比较关怀,咱们都需要剖析一些“php获取月份第一天”的相关知识。那么小编也在网络上搜集了一些关于“php获取月份第一天””的相关内容,希望同学们能喜欢,咱们一起来学习一下吧!PHP中时间相关的函数还是挺多的,本文只整理四个最常用的。分别是date(), time(), microtime()和strtotime()。每个函数的具体语法,大家可以自行翻手册,这里不再赘述,这里会按照下面三个主题进行讨论。
日期相关
日期相关主要指的是date()函数,date()函数中有很多格式字符,你可以根据需要,自行选择合适的日期格式输出。可能PHP工程师最熟悉的就是下面的代码:
// 获取当前时间:2018-09-01 18:15:56
echo "获取当前时间:" . date('Y-m-d H:i:s'), '<br>';
而我想要强调的是大家不太熟悉,但又很有用的格式字符。例如:
// 星期几(英文全称):Saturday
echo "星期几(英文全称):" . date('l'), '<br>';
// 星期几(英文全称):Sat
echo "星期几(英文缩写):" . date('D'), '<br>';
// 星期几(英文全称):6
echo "星期几(数字表示):" . date('w'), '<br>';
// 月份(英文全称):September
echo "月份(英文全称):" . date('F'), '<br>';
// 月份(英文全称):Sep
echo "月份(英文缩写):" . date('M'), '<br>';
// 月份(英文全称):09
echo "月份(数字表示):" . date('m'), '<br>';
// Asia/Shanghai
echo "时区:" . date('e'), '<br>';
// CST China Standard Time
echo "本地时区:" . date('T'), '<br>';
// 一年中的第几天(0-365):243
echo "一年中的第几天(0-365):" . date('z'), '<br>';
// 一年中的第几周(1-54):35
echo "一年中的第几周(1-54):" . date('W'), '<br>';
// 固定小时:2018-09-01 12:15:56
echo "固定小时:" . date('Y-m-d 12:i:s'), '<br>';
固定分钟:2018-09-01 18:00:56
echo "固定分钟:" . date('Y-m-d H:00:s'), '<br>';
// 固定秒数:2018-09-01 18:15:00
echo "固定秒数:" . date('Y-m-d H:i:00'), '<br>';
以上代码可能的应用场景有:
获取当前时间获取星期几,因为周一到周五与周六日的业务逻辑可能不同,所以要区分时间粒度划分。获取一年中第几天或第几周,甚至对获取月份进行简单封装后,还能获取一年中的季度数,例如1,2,3月是第一季度。这些时间数据对于统计,计划任务等可能有用。例如:银行的计息,可能按照月度,季度或年来分别执行。固定时间在需要固定计数的场景下用的比较多,例如:拍卖,可能是下午5点钟01分正式开拍,所以这是需要将时间固定好;或者是计划任务执行,时间不到进程就先睡一会儿,时间到了再执行。
以上还有很多应用场景,大家可以自行对号入座。
时间戳相关
有的时候我们可以需要时间戳。例如:保存时间是用时间戳要比日期时间格式占用空间更小;计算时间时也更方便。下面我按照“秒”,“毫秒”(1秒=1000毫秒(ms
)和“微妙”(1秒=1 000 000 微秒(μs) )三个单位来分别获取:
// echo 当前时间戳(以秒为单位):1535796956
echo "当前时间戳(以秒为单位):" . time(), '<br>';
// 当前时间戳(以毫秒为单位):1535796956916
function mtime()
{
list($msec, $sec) = explode(" ", microtime());
return ceil(((float) $msec + (float) $sec) * 1000);
}
echo "当前时间戳(以毫秒为单位):" . number_format(mtime(), 0, '', ''), '<br>';
// 当前时间戳(以微妙秒为单位):1535796956916023
function utime()
{
list($usec, $sec) = explode(" ", microtime());
return ceil(((float) $usec + (float) $sec) * 1000000);
}
echo "当前时间戳(以微妙秒为单位):" . number_format(utime(), 0, '', ''), '<br>';
PHP中time()可以直接返回以秒为单位的时间戳,而microtime()返回的结果则包含小数秒部分。以上分别获取了秒,毫秒和微妙为单位的时间戳,其中的毫秒获取,类似JS中的getMilliseconds()。在应用时,要根据不同的时间粒度来选择,例如:
普通的创建时间,日志记录等用以秒为单位的时间戳就够了而在“秒杀”或“竞拍”这种高可用场景下可能就需要毫秒计时了;而在消息队列或密集计算等场景下,就可能需要根据微妙排序了
以上代码中我对取到的结果进行了向上取整(ceil()),如果业务中需要向下取整,可自行调节。
时间范围相关
最后,回答一下刚开始提到的问题。如果我有一张订单表(order)。那么,我如果将过去一周,或过去三个月的订单做统计呢(例如:统计订单数或销售额)。
首先我们来看一个逻辑最简单的实现:
// 在当前时间戳的基础上减去7天的秒数,获取的就是7天前的时间
$nextWeek = time() - (7 * 24 * 60 * 60);
// 当前时间:2018-09-01
echo '当前时间:' . date('Y-m-d') . '<br>';
// 上周: 2018-08-25
echo '上周: ' . date('Y-m-d', $nextWeek) . '<br>';
另外还可以通过strtotime()来实现,起始更简单
// 上周: 2018-08-25
echo '上周: ' . date('Y-m-d', strtotime('-1 week')) . '<br>';
// 上个月: 2018-08-01
echo '上个月: ' . date('Y-m-d', strtotime('-1 month')) . '<br>';
// 前三个月: 2018-06-01
echo '前三个月: ' . date('Y-m-d', strtotime('-3 month')) . '<br>';
上面两个例子都是获取过去的时间,另外,还可以获取未来的时间,例如:
// 下周: 2018-09-08
echo '下周: ' . date('Y-m-d', strtotime('+1 week')) . '<br>';
// 下周四: 2018-09-06
echo '下周四: ' . date('Y-m-d', strtotime('next Thursday')) . '<br>';
// 下周又2天又4小时又2秒: 2018-09-10 22:15:58
echo '下周又2天又4小时又2秒: ' . date('Y-m-d H:i:s', strtotime('+1 week 2 days 4 hours 2 seconds')) . '<br>';
以上代码对时间的处理实际上可以分为两类:过去的时间和将来的时间。而这两类分别对应下面的两种主要的应用场景:
统计。例如统计一下过去一个月一共有多少订单。可能的SQL语句是这样SELECT count(*) FROM order WHERE created > 上个月的时间戳预定。例如预定宾馆(未来的时间段)或者买票(未来的时间点)
以上就是今天的内容了,下次再见!
标签: #php获取月份第一天