php技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > PHP编程 > php技巧 > javascript 计算小时数

php 日期时间处理函数小结

投稿:mdxy-dxy

php 日期时间处理函数小结,包括日期转换为星期、计算出两个日期之间的月份等,值得参考下。

在php中日期时间处理函数常用的有date(),time(),strtotime()这三个函数了,下面我来给大家简单的介绍一下这个函数在php日期时间中处理的一些实例吧.

php 时间一般都采用大整数的是形式存储和调用,time() 函数返回当前时间的 Unix 时间戳.

定义和用法

time() 函数返回当前时间的 Unix 时间戳。

语法:time(void)

参数 描述 

void 可选.

说明:返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数.

例,代码如下:

<?php
$t=time(); 
$nextWeek = time() + (7 * 24 * 60 * 60); // 7 days; 24 hours; 60 mins; 60secs //开源代码phpfensi.com 
echo $t; 
echo $nextWeek; 
?>

定义和用法:strtotime() 函数将任何英文文本的日期时间描述解析为 Unix 时间戳.

语法:strtotime(time,now)

strtotime(time,now) 函数将任何英文文本的日期时间描述解析为 Unix 时间戳,代码如下:

<?php 
echo(strtotime("now")); 
echo(strtotime("3 October 2005")); 
echo(strtotime("+5 hours")); 
echo(strtotime("+1 week")); 
echo(strtotime("+1 week 3 days 7 hours 5 seconds")); 
echo(strtotime("next Monday")); 
//开源代码phpfensi.com 
echo(strtotime("last Sunday")); 
?> 

date(format,timestamp)函数可把时间戳格式化为可读性更好的日期和时间.

d - 月中的天 (01-31)

m - 当前月,以数字计 (01-12)

Y - 当前的年(四位数)

代码如下:

<?php 
echo date("Y/m/d"); 
echo "<br />"; 
echo date("Y.m.d"); 
echo "<br />"; 
echo date("Y-m-d"); 
echo date('Y年m月d日',time()); 
?> 

理解上面三个函数,就可以很好地在php中操作日期了.

date()函数:用函式 date() 实现

显示的格式:年-月-日 小时:分钟:秒

相关时间参数:

a - "am" 或是 "pm"

A - "AM" 或是 "PM"

d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"

D - 星期几,三个英文字母; 如: "Fri"

F - 月份,英文全名; 如: "January"

h - 12 小时制的小时; 如: "01" 至 "12"

H - 24 小时制的小时; 如: "00" 至 "23"

g - 12 小时制的小时,不足二位不补零; 如: "1" 至 12"

G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23"

i - 分钟; 如: "00" 至 "59"

j - 几日,二位数字,若不足二位不补零; 如: "1" 至 "31"

l - 星期几,英文全名; 如: "Friday"

m - 月份,二位数字,若不足二位则在前面补零; 如: "01" 至 "12"

n - 月份,二位数字,若不足二位则不补零; 如: "1" 至 "12"

M - 月份,三个英文字母; 如: "Jan"

s - 秒; 如: "00" 至 "59"

S - 字尾加英文序数,二个英文字母; 如: "th","nd"

t - 指定月份的天数; 如: "28" 至 "31"

U - 总秒数

w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六)

Y - 年,四位数字; 如: "1999"

y - 年,二位数字; 如: "99"

z - 一年中的第几天; 如: "0" 至 "365"

php 计算小时数并化整为零

/* Author: 杨宇 yangyu@sina.cn */
//参数$hours_min为数组,数组的格式为1:10,返回为1小时
/*
例如:
$hours_min[0] = '1:10';
$hours_min[1] = '2:30';
echo hours_sum($hours_min);

输入为4,也就是合计4小时

*/
function hours_sum($hours_min){

if (!is_array($hours_min)) return false;

$tmp_arr = array();
foreach ($hours_min as $v){
$tmp_arr = explode(':',$v);
$hour[] = $tmp_arr[0];
$min[] = $tmp_arr[1];
}

$hours = array_sum($hour);
$mins = array_sum($min);

$mins = $mins >= 10 ? str_pad($mins, 2, 0, STR_PAD_RIGHT) : $mins;
$hours += floor($mins/60);
$hours += $mins%60 >= 30 ? 1 : 0;
return $hours;
}

将日期转化为星期

/* Author: 杨宇 <yangyu@sina.cn> */
//输入的$data参数为,yy/mm/dd 或者 yy-mm-dd,返回星期几
function getWeekDay($date) {
$date = str_replace('/','-',$date);
$dateArr = explode("-", $date);
return date("N", mktime(0,0,0,$dateArr[1],$dateArr[2],$dateArr[0]));
}
[/code]
PHP将秒转化成小时和分(格式为 ** 小时 ** 分)
[code]
/* Author: 杨宇 <yangyu@sina.cn> */
//将秒(非时间戳)转化成 ** 小时 ** 分
function sec2time($sec){

$sec = round($sec/60);
if ($sec >= 60){
$hour = floor($sec/60);
$min = $sec%60;
$res = $hour.' 小时 ';
$min != 0 && $res .= $min.' 分';
}else{
$res = $sec.' 分钟';
}
return $res;
}

在开发中会遇到获取两个日期之间的差值,获取每天的日期格式等等,针对这和问题给出对应的函数进行处理

dateMonths()计算出两个日期之间的月份

/**
 * 计算出两个日期之间的月份
 * @author 微云科技 ROVAST
 * @param  [type] $start_date [开始日期,如2014-03]
 * @param  [type] $end_date   [结束日期,如2015-12]
 * @param  string $explode    [年份和月份之间分隔符,此例为 - ]
 * @param  boolean $addOne    [算取完之后最后是否加一月,用于算取时间戳用]
 * @return [type]             [返回是两个月份之间所有月份字符串]
 */
function dateMonths($start_date,$end_date,$explode='-',$addOne=false){
    //判断两个时间是不是需要调换顺序
    $start_int = strtotime($start_date);
    $end_int = strtotime($end_date);
    if($start_int > $end_int){
        $tmp = $start_date;
        $start_date = $end_date;
        $end_date = $tmp;
    }


    //结束时间月份+1,如果是13则为新年的一月份
    $start_arr = explode($explode,$start_date);
    $start_year = intval($start_arr[0]);
    $start_month = intval($start_arr[1]);


    $end_arr = explode($explode,$end_date);
    $end_year = intval($end_arr[0]);
    $end_month = intval($end_arr[1]);


    $data = array();
    $data[] = $start_date;


    $tmp_month = $start_month;
    $tmp_year = $start_year;


    //如果起止不相等,一直循环
    while (!(($tmp_month == $end_month) && ($tmp_year == $end_year))) {
        $tmp_month ++;
        //超过十二月份,到新年的一月份
        if($tmp_month > 12){
            $tmp_month = 1;
            $tmp_year++;
        }
        $data[] = $tmp_year.$explode.str_pad($tmp_month,2,'0',STR_PAD_LEFT);
    }


    if($addOne == true){
        $tmp_month ++;
        //超过十二月份,到新年的一月份
        if($tmp_month > 12){
            $tmp_month = 1;
            $tmp_year++;
        }
        $data[] = $tmp_year.$explode.str_pad($tmp_month,2,'0',STR_PAD_LEFT);
    }


    return $data;
}

dateMonthsSections()计算出两个日期之间的月份区间

/**
 * 计算出两个日期之间的月份区间
 * @author 微云科技 ROVAST
 * @param  [type] $start_date [开始日期,如2014-03]
 * @param  [type] $end_date   [结束日期,如2015-12]
 * @param  string $explode    [年份和月份之间分隔符,此例为 - ]
 * @param  boolean $addOne    [算取完之后最后是否加一月,用于算取时间戳用]
 * @return [type]             [返回是两个月份之间所有月份字符串]
 */
function dateMonthsSections($start_date, $end_date, $explode='-', $addOne=false){
    $data = dateMonths($start_date,$end_date,$explode,$addOne);
    $length = sizeof($data);

    $res = array();
    foreach ($data as $key => $value) {
        if($key < ($length-1)){
            $date1 = $value;
            $date2 = $data[$key + 1];
            $res[$key][0] = $date1;
            $res[$key][1] = $date2;
        }
    }

    return $res;
}

获取当月天数 get_day()

/**
* 获取当月天数
* @param $date 
* @param $rtype 1天数 2具体日期数组
* @return 
*/
function get_day( $date ,$rtype = '1')  
{
    $tem = explode('-' , $date);    //切割日期 得到年份和月份
    $year = $tem['0'];
    $month = $tem['1'];
    if( in_array($month , array( '1' , '3' , '5' , '7' , '8' , '01' , '03' , '05' , '07' , '08' , '10' , '12')))
    {
      // $text = $year.'年的'.$month.'月有31天';
      $text = '31';
    }
    elseif( $month == 2 )
    {
      if ( $year%400 == 0 || ($year%4 == 0 && $year%100 !== 0) )    //判断是否是闰年
      {
        // $text = $year.'年的'.$month.'月有29天';
        $text = '29';
      }
      else{
        // $text = $year.'年的'.$month.'月有28天';
        $text = '28';
      }
    }
    else{
      // $text = $year.'年的'.$month.'月有30天';
      $text = '30';
    }
    if ($rtype == '2') {
      for ($i = 1; $i <= $text ; $i ++ ) {
        $r[] = $year."-".$month."-".$i;
      }
    } else {
      $r = $text;
    }
    return $r;
}

到此这篇关于php 日期时间处理函数小结的文章就介绍到这了,更多相关javascript 计算小时数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文