PHP函数篇(一)---日期/时间函数篇(1)

217 阅读3分钟

本文已参与【新人创作礼】活动 ,一起开启掘金创作之路

# 1、修改时区

PHP 默认的时区设置是 UTC 时间,即与格林尼治时间一致。

(1)、修改配置文件php.ini中date.timezone的属性,然后重启 Apache 服务器即可

    date.timezone=Asia/Shanghai

(2)、使用 date_default_timezone_set()函数设置时区。 和php.ini中 date.timezone 属性的值相同。

date_default_timezone_set('Asia/Shanghai');//设置时区

echo date('Y-m-d H:i:s');//输出的当前时间为北京时间

# 2、time()函数

用来返回当前时间的 UNIX 时间戳。

    date_default_timezone_set('Asia/Shanghai');//设置时区
    
    echo time() ; //输出的是当前时间的时间戳

# 3.mktime()和 strtotime()函数

在 PHP 中,如果需要将日期和时间转变成 UNIX 时间戳,可以使用 mktime()函数或者 strtotime()函数。

(1)mktime()函数。

mktime(hour,minute,second,month,day,year,is_dst)

参数描述
hour可选 规定小时
minute可选 规定分钟
second可选 规定秒
month可选 规定用数字表示的月
day可选 规定天
year可选 规定年在某些系统上,合法值介于 1901 - 2038 之间。不过在 PHP 5 中已经不存在这个限制了。
is_dst可选 如果时间在日光节约时间(DST)期间,则设置为1,否则设置为0,若未知,则设置为-1 自 5.1.0 起,is_dst 参数被废弃 因此应该使用新的时区处理特性。
例子
## mktime() 函数对于日期运算和验证非常有用。自动校正越界的日期:

var_dump(date("Y-m-d",mktime(0,0,0,12,36,2022)));
var_dump(date("Y-m-d",mktime(0,0,0,13,1,2022)));
var_dump(date("Y-m-d",mktime(0,0,0,1,1,99)));

输出:
string(10) "2023-01-05"
string(10) "2023-01-01"
string(10) "1999-01-01"

## time() 函数

定义和用法 time() 函数返回当前时间的 Unix 时间戳。

例子

### 例子1

var_dump(time());
var_dump(date("Y-m-d",time()));

输出:

int(1652613469)
string(10) "2022-05-15"

### 例子2
$nextWeek = time() + (7 * 24 * 60 * 60);
var_dump('Now:  '. date('Y-m-d'));
var_dump('Next Week: '. date('Y-m-d', $nextWeek)); 

输出:

string(16) "Now:  2022-05-15"
string(21) "Next Week: 2022-05-22"

### 日常开发可能会用到的案例(date()+ time() + strtotime())

#### 当月的天数,某月的天数
$current_month_days = date('t');
$some_month_days    = date('t',strtotime('2023-2-6'));
var_dump($current_month_days);
var_dump($some_month_days);
  
输出
string(2) "31"
string(2) "28"

#### 这个月的第一天的日期,这个月的最后一天的日期
$current_month_first_date = date('Y-m-01');
$current_month_last_date  = date('Y-m-d',strtotime(date('Y-m-01',strtotime('+1 month')).'-1 day'));
var_dump($current_month_first_date);
var_dump($current_month_last_date);

输出
string(10) "2022-05-01"
string(10) "2022-05-31"
 
#### 上个月第一天的日期格式,上个月最后一天的日期
$last_month_start_date = date('Y-m-01',strtotime('last month'));
$last_month_end_date   = date('Y-m-d',strtotime(date('Y-m-01').'-1 day'));
var_dump($last_month_start_date);
var_dump($last_month_end_date);

输出
string(10) "2022-04-01"
string(10) "2022-04-30"
 
#### 下个月的第一天时间日期 ,下个月的最后一天时间日期
$next_mont_start_date = date('Y-m-01',strtotime('next month'));
$next_mont_end_date   = date('Y-m-d',strtotime(date('Y-m-01',strtotime('+2 month')).'-1 day'));
var_dump($next_mont_start_date);
var_dump($next_mont_end_date);
 
输出
string(10) "2022-06-01"
string(10) "2022-06-30"
 
#### 今日开始-结束时间戳
$today_start_time = strtotime(date('Y-m-d 00:00:00',time()));
$today_end_time   = strtotime(date('Y-m-d 23:59:59'));
var_dump($today_start_time);
var_dump($today_end_time);

输出
int(1652572800)
int(1652659199)

#### 本周开始-结束时间戳(2022-05-09 ----- 2022-05-15)
$week_start_time = mktime(0, 0, 0, date("m"),date("d")-date("w")+1,date("Y"));
$week_end_time   = mktime(23,59,60,date("m"),date("d")-date("w")+7,date("Y"));
var_dump($week_start_time);
var_dump($week_end_time); 

输出
int(1652659200)
int(1653264000)

#### 本月开始-结束时间戳(2022-05-01 ----- 2022-05-31)
$month_start_time = strtotime(date('Y-m-01').'-1 day')+24*60*60;
$month_end_time   = strtotime(date('Y-m-01 00:00:00',strtotime('+1 month')));
var_dump($month_start_time);
var_dump($month_end_time);

输出
int(1651363200)
int(1654041600)

       
#### 本年开始时间-结束时间戳(2022-01-01 ----- 2022-12-31)
$year_start_time = strtotime(date('Y-01-01 00:00:00',time()));
$year_end_time   = strtotime(date('Y-01-01 00:00:00',strtotime('+1 year')));
var_dump($year_start_time);
var_dump($year_end_time);

输出
int(1640995200)
int(1672531200)