Date/Time 函数
在线手册:中文  英文

getdate

(PHP 4, PHP 5)

getdate取得日期/时间信息

说明

array getdate ([ int $timestamp = time() ] )

返回一个根据 timestamp 得出的包含有日期信息的关联数组 array。如果没有给出时间戳则认为是当前本地时间。

参数

timestamp

可选的 timestamp 参数是一个 integer 的 Unix 时间戳,如未指定,参数值默认为当前本地时间。也就是说,其值默认为 time() 的返回值。

返回值

返回一个根据 timestamp 得出的包含有日期信息的关联数组 array。 返回的关联数组中的键名单元有以下几个:

返回的关联数组中的键名单元
键名 说明 返回值例子
"seconds" 秒的数字表示 059
"minutes" 分钟的数字表示 059
"hours" 小时的数字表示 023
"mday" 月份中第几天的数字表示 131
"wday" 星期中第几天的数字表示 0 (周日) 到 6 (周六)
"mon" 月份的数字表示 112
"year" 4 位数字表示的完整年份 比如: 19992003
"yday" 一年中第几天的数字表示 0365
"weekday" 星期几的完整文本表示 SundaySaturday
"month" 月份的完整文本表示,比如 January 或 March JanuaryDecember
0 自从 Unix 纪元开始至今的秒数,和 time() 的返回值以及用于 date() 的值类似。 系统相关,典型值为从 -21474836482147483647

范例

Example #1 getdate() 例子

<?php
$today 
getdate();
print_r($today);
?>

以上例程的输出类似于:

Array
(
    [seconds] => 40
    [minutes] => 58
    [hours]   => 21
    [mday]    => 17
    [wday]    => 2
    [mon]     => 6
    [year]    => 2003
    [yday]    => 167
    [weekday] => Tuesday
    [month]   => June
    [0]       => 1055901520
)

参见


Date/Time 函数
在线手册:中文  英文

用户评论:

moshe at unirgy dot com (2009-09-07 16:47:45)

A function/method to calculate the next workday, taking into account US federal holidays:
<?php
function getNextWorkDayTime($date=null)
{
    
$time is_string($date) ? strtotime($date) : (is_int($date) ? $date time());
    
$y date('Y'$time);
    
// calculate federal holidays
    
$holidays = array();
    
// month/day (jan 1st). iteration/wday/month (3rd monday in january)
    
$hdata = array('1/1'/*newyr*/'7/4'/*jul4*/'11/11'/*vet*/'12/25'/*xmas*/'3/1/1'/*mlk*/'3/1/2'/*pres*/'5/1/5'/*memo*/'1/1/9'/*labor*/'2/1/10'/*col*/'4/4/11'/*thanks*/);
    foreach (
$hdata as $h1) {
        
$h explode('/'$h1);
        if (
sizeof($h)==2) { // by date
            
$htime mktime(000$h[0], $h[1], $y); // time of holiday
            
$w date('w'$htime); // get weekday of holiday
            
$htime += $w==86400 : ($w==? -86400 0); // if weekend, adjust
        
} else { // by weekday
            
$htime mktime(000$h[2], 1$y); // get 1st day of month
            
$w date('w'$htime); // weekday of first day of month
            
$d 1+($h[1]-$w+7)%7// get to the 1st weekday
            
for ($t=$htime$i=1$i<=$h[0]; $i++, $d+=7) { // iterate to nth weekday
                 
$t mktime(000$h[2], $d$y); // get next weekday
                 
if (date('n'$t)>$h[2]) break; // check that it's still in the same month
                 
$htime $t// valid
            
}
        }
        
$holidays[] = $htime// save the holiday
    
}
    for (
$i=0$i<5$i++, $time+=86400) { // 5 days should be enough to get to workday
        
if (in_array(date('w'$time), array(06))) continue; // skip weekends
        
foreach ($holidays as $h) { // iterate through holidays
            
if ($time>=$h && $time<$h+86400) continue 2// skip holidays
        
}
        break; 
// found the workday
    
}
    return 
$time;
}
?>


[EDIT BY danbrown AT php DOT net: Contains a bugfix by (yhbeh888 AT yahoo DOT com) on 24-FEB-2010 to address a bug in the "7th line counted from the bottom."]

binupillai2003 at yahoo dot com(Binu V Pillai) (2009-08-25 00:32:22)

<?php
/* Function to find the first and last day of the month from the given date.
*
* Author Binu v Pillai            binupillai2003@yahoo.com
* @Param            String             yyyy-mm-dd
*
*/
function findFirstAndLastDay($anyDate)
{
    
//$anyDate            =    '2009-08-25';    // date format should be yyyy-mm-dd
    
list($yr,$mn,$dt)    =    split('-',$anyDate);    // separate year, month and date
    
$timeStamp            =    mktime(0,0,0,$mn,1,$yr);    //Create time stamp of the first day from the give date.
    
$firstDay            =     date('D',$timeStamp);    //get first day of the given month
    
list($y,$m,$t)        =     split('-',date('Y-m-t',$timeStamp)); //Find the last date of the month and separating it
    
$lastDayTimeStamp    =    mktime(0,0,0,$m,$t,$y);//create time stamp of the last date of the give month
    
$lastDay            =    date('D',$lastDayTimeStamp);// Find last day of the month
    
$arrDay                =    array("$firstDay","$lastDay"); // return the result in an array format.
    
    
return $arrDay;
}

//Usage
$dayArray=array();
$dayArray=findFirstAndLastDay('2009-02-25');
print 
$dayArray[0];
print 
$dayArray[1];
?>

eric dot schultz at NOSPAM dot CyVon dot com (2008-12-16 18:33:50)

Here is another gmgetdate that is a little faster/suscint (no loops). 

<?php
function gmgetdate2($ts null){
        
$k = array('seconds','minutes','hours','mday',
                
'wday','mon','year','yday','weekday','month',0);
        return(
array_combine($k,split(":",
                
gmdate('s:i:G:j:w:n:Y:z:l:F:U',is_null($ts)?time():$ts))));
        }
?>

It also returns the values in the same order as getdate.

Anonymous (2008-10-16 07:01:46)

I couldn't get the last 2 examples of gmgetdate() to work, so here's a modification that did work for me that behaves exactly like getdate() :

<?php
function gmgetdate($timestamp null) {
    if (
is_null($timestamp)) { $timestamp time(); }

    
$dateParts = array(
        
'mday'    => 'j',
        
'wday'    => 'w',
        
'yday'    => 'z',
        
'mon'     => 'n',
        
'year'    => 'Y',
        
'hours'   => 'G',
        
'minutes' => 'i',
        
'seconds' => 's',
        
'weekday' => 'l',
        
'month'   => 'F',
        
0         => 'U'
    
);

    while (list(
$part$format) = each($dateParts)) {
        
$GMdateParts[$part] = gmdate($format$timestamp);
    }

    return 
$GMdateParts;
}
?>

chris AT cmbuckley DOT co DOT uk (2008-08-08 07:08:55)

For those who want the gmgetdate function that matches the behaviour of getdate:

<?php
function gmgetdate($timestamp null) {
    if (
is_null($timestamp)) { $timestamp time(); }

    
$dateParts = array(
        
'mday'    => 'j',
        
'wday'    => 'w',
        
'yday'    => 'z',
        
'mon'     => 'n',
        
'year'    => 'Y',
        
'hours'   => 'G',
        
'minutes' => 'i',
        
'seconds' => 's',
        
'weekday' => 'l',
        
'month'   => 'F',
        
0         => 'U'
    
);

    while (list(, 
$value) = each($dateParts)) {
        
$value gmdate($value$timestamp);
        if (
is_numeric($value)) { $value = (int)$value; }
    }

    return 
$dateParts;
}
?>

timforte at gmail dot com (2008-01-10 08:07:45)

It's worth noting that this is local time, not UTC/GMT - gmgetdate doesn't exist :(.

The most logical way to handle date arithmetic without hitting DST problems is to work in UTC...

<?php
function add_days($my_date,$numdays) {
  
$date_t strtotime($my_date.' UTC');
  return 
gmdate('Y-m-d',$date_t + ($numdays*86400));
}
?>

[it's even faster if you use gmmktime instead of strtotime]

andre at anlex dot co dot za (2006-12-13 04:38:52)

I thought best to show a posseble way to go about bypassing the end month issue where the first day in a new month will have the monday of the week that it falls in - in the old month. Use the numbering of days as the constant and work you way from there.

Example:
<?php
//-----------------------------
$now time();
$num date("w");
if (
$num == 0)
$sub 6; }
else { 
$sub = ($num-1); }
$WeekMon  mktime(000date("m"$now)  , date("d"$now)-$subdate("Y"$now));    //monday week begin calculation
$todayh getdate($WeekMon); //monday week begin reconvert

$d $todayh[mday];
$m $todayh[mon];
$y $todayh[year];
echo 
"$d-$m-$y"//getdate converted day

?> 

Allot less code makes everyone happy..

Jared Armstrong (2006-12-09 22:05:00)

A nice little function I wrote to determine what number occurrence weekday it is of the month for a given timestamp. (I.e. 2nd Friday, or the 3rd Thursday)

Eg: print_r(getWeekdayOccurrence(mktime(0, 0, 0, 12, 1, 2006)));
Outputs: Array ( [0] => 1 [1] => Friday )  [The first friday]

Eg. print_r(getWeekdayOccurrence(mktime(0, 0, 0, 8, 17, 2009)));
Outputs: Array ( [0] => 3 [1] => Monday ) [The third Monday]

<?php
function getWeekdayOccurrence($time) { 
    
$month intval(date("m"$time)); $day intval(date("d"$time));
    for (
$i 0$i 7$i++) {
        
$days[] = date("l"mktime(000$month, ($i+1), date("Y"$time)));    
    }

    
$posd  array_search(date("l"$time), $days);
    
$posdm array_search($days[0], $days) - $posd; /

    return array(((
$day+$posdm+6)/7), $days[$posd]);        
}
?>

cesar at nixar dot org (2006-10-22 08:49:08)

<?php

  
/**
   *  This function is similar to getdate() but it returns
   * the month information.
   *
   *  Returns an associative array containing the month
   * information of the parameters, or the current month
   * if no parameters are given.
   *
   */

  
function getmonth ($month null$year null)
  {
      
// The current month is used if none is supplied.
      
if (is_null($month))
          
$month date('n');

      
// The current year is used if none is supplied.
      
if (is_null($year))
          
$year date('Y');

      
// Verifying if the month exist
      
if (!checkdate($month1$year))
          return 
null;

      
// Calculating the days of the month
      
$first_of_month mktime(000$month1$year);
      
$days_in_month date('t'$first_of_month);
      
$last_of_month mktime(000$month$days_in_month$year);

      
$m = array();
      
$m['first_mday'] = 1;
      
$m['first_wday'] = date('w'$first_of_month);
      
$m['first_weekday'] = strftime('%A'$first_of_month);
      
$m['first_yday'] = date('z'$first_of_month);
      
$m['first_week'] = date('W'$first_of_month);
      
$m['last_mday'] = $days_in_month;
      
$m['last_wday'] = date('w'$last_of_month);
      
$m['last_weekday'] = strftime('%A'$last_of_month);
      
$m['last_yday'] = date('z'$last_of_month);
      
$m['last_week'] = date('W'$last_of_month);
      
$m['mon'] = $month;
      
$m['month'] = strftime('%B'$first_of_month);
      
$m['year'] = $year;

      return 
$m;
  }

  
// Output
  
print_r(getmonth(111978));
  
print_r(getmonth());

?>

Cas_AT_NUY_DOT_INFO (2006-03-04 05:47:31)

<?php
// This functions calculates the next date only using business days
// 2 parameters, the startdate and the number of businessdays to add
    
function calcduedate($datecalc,$duedays) {
    
$i 1;
    while (
$i <= $duedays) {
        
$datecalc += 86400// Add a day.
        
$date_info  getdate$datecalc );
        if ((
$date_info["wday"] == 0) or ($date_info["wday"] == 6) )  {
            
$datecalc += 86400// Add a day.
            
continue;
        }
        
$i++;
    }
    return 
$datecalc ;
    }
?>

leo25in at yahoo dot com (2005-05-11 05:17:47)

getting weekday(actual date) from any give date.

<?php
function cal_date($wday,$tstamp)
{
    return 
$tstamp-($wday*(24*3600));
}

function 
getweekday($m,$d,$y)
{
    
$tstamp=mktime(0,0,0,$m,$d,$y);
    
    
$Tdate getdate($tstamp);
    
    
$wday=$Tdate["wday"];
    
    switch(
$wday)
    {
        case 
0;
        
$wstamp=cal_date($wday,$tstamp);
        
//echo date("Y-m-d",$wstamp);
        
break;
        
        case 
1;
        
$wstamp=cal_date($wday,$tstamp);
        
//echo date("Y-m-d",$wstamp);
        
break;
        
        
        case 
2;
        
$wstamp=cal_date($wday,$tstamp);
        
//echo date("Y-m-d",$wstamp);
        
break;
        
        case 
3;
        
$wstamp=cal_date($wday,$tstamp);
        
//echo date("Y-m-d",$wstamp);
        
break;
        
        case 
4;
        
$wstamp=cal_date($wday,$tstamp);
        
//echo date("Y-m-d",$wstamp);
        
break;
        
        case 
5;
        
$wstamp=cal_date($wday,$tstamp);
        
//echo date("Y-m-d",$wstamp);
        
break;
        
        case 
6;
        
$wstamp=cal_date($wday,$tstamp);
        
//echo date("Y-m-d",$wstamp);
        
break;
    }
    
    
     
$w["day"]=date("d",$wstamp);
     
$w["month"]=date("m",$wstamp);
     
$w["year"]=date("Y",$wstamp);
     
     return 
$w;

}
?>

getisomonday($year, $week) (2004-04-21 14:58:58)

getdate does not convert week numbers. this function relies on strftime to find a timestamp that falls on the monday of specified year and ISO week:

<?php function getisomonday($year$week) {
        
# check input
        
$year min ($year2038); $year max ($year1970);
        
$week min ($week53); $week max ($week1);
        
# make a guess
        
$monday mktime (1,1,1,1,7*$week,$year);
        
# count down to week
        
while (strftime('%V'$monday) != $week)
                
$monday -= 60*60*24*7;
        
# count down to monday
        
while (strftime('%u'$monday) != 1)
                
$monday -= 60*60*24;
        
# got it
        
return $monday;
?>

Yura Pylypenko (plyrvt at mail dot ru) (2003-09-15 06:29:38)

In addition to canby23 at ms19 post:
It's a very bad idea to consider day having 24 hours (86400 secs), because some days have 23, some - 25 hours due to daylight saving changes. Using of mkdate() and strtotime() is always preferred. strtotime() also has a very nice behaviour of datetime manipulations:
<?php
echo strtotime ("+1 day"), "\n";
echo 
strtotime ("+1 week"), "\n";
echo 
strtotime ("+1 week 2 days 4 hours 2 seconds"), "\n";
echo 
strtotime ("next Thursday"), "\n";
echo 
strtotime ("last Monday"), "\n"
?>

易百教程