php中时间戳等相关小概念笔记

首先说下时间戳吧,因为工作需要,对接接口时要用到各种类型的时间戳,所以抽个时间把这些时间戳整理了下.
如果想看看返回的时间戳对不对,这里有个在线转换工具,可以试试时间戳在线转换

获取当前的时间戳是最简单的

格式如下:
$test = time();
它返回当前的 Unix 时间戳.这是返回的结果1487839316

获取当前日期下的零时零点零分的时间戳

格式如下:
$tmp1 = date("Y-m-d H:i:s", mktime(0, 0, 0, date("m"), date('d'), date("Y")));
这个获取的是当前日期下的零时零点零分的时间.打印如下结果:2017-02-23 00:00:00
但是这里直接使用strtotime获取的并不是这个时间,他实际返回的是2017-02-23 07:00:00.这个结果和mktime(0, 0, 0, date("m"), date('d'), date("Y"))是一样的.
如果想要得到当前日期下的零时零点零分的时间戳,需要这样

1
2
3
4
5
$tmp = mktime(0, 0, 0, date("m"), date('d'), date("Y"));
$tmp1 = date("Y-m-d H:i:s", mktime(0, 0, 0, date("m"), date('d'), date("Y")));//显示
$tmp2 = strtotime($tmp1)-25200;
$tmp3 = $tmp - 25200;//等价于$tmp2
print_r($tmp3);

获取前一天(后一天)的零时零点零分的时间戳

这个就是对上面的mktime里面的参数进行修改
类似这样$day = date('d') + 1;
顺便说下mktime(时,分,秒,月,日,年),它是取得一个日期的 Unix 时间戳.

获取身份证中出生日期的时间戳

首先说下如何从身份证中获取出生日期,当然,在这之前,要知道身份证有15位的和18位的,所以如果是15位的要转换成18位的,方便计算.
代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public function getIDCard($idCard) {
// 若是15位,则转换成18位;否则直接返回ID
if (15 == strlen ( $idCard )) {
$W = array (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1 );
$A = array ("1","0","X","9","8","7","6","5","4","3","2" );
$s = 0;
$idCard18 = substr ( $idCard, 0, 6 ) . "19" . substr ( $idCard, 6 );
$idCard18_len = strlen ( $idCard18 );
for($i = 0; $i < $idCard18_len; $i ++) {
$s = $s + substr ( $idCard18, $i, 1 ) * $W [$i];
}
$idCard18 .= $A [$s % 11];
// print_r($idCard18);exit();
return $idCard18;
} else {
return $idCard;
}
}

然后提取出生日期:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public function getAgeByID($id)
{
$length = strlen($id);
if(empty($id)){
return "";
}
if ($length == 18){
$date = strtotime(substr($id, 6, 8));
print_r($date);exit();
return $date;
}elseif($length == 15){
$id = $this->getIDCard($id);
$date = strtotime(substr($id, 6, 8));
return $date;
}
}

后面就可以直接使用这个函数了.

json_encode编码有乱码怎么办

json_encode($arr, JSON_UNESCAPED_UNICODE)

返回结果处理成数组

1
2
3
4
5
6
7
8
9
10
11
/*
* 返回参数处理,对象转化为数组
*/
public function object_array($obj) {
$_arr = is_object ( $obj ) ? get_object_vars ( $obj ) : $obj;
foreach ( $_arr as $key => $val ) {
$val = (is_array ( $val ) || is_object ( $val )) ? $this->object_array ( $val ) : $val;
$arr [$key] = $val;
}
return $arr;
}