27
2/17/14 PHP: Date/Time Functions - Manual www.php.net/manual/en/ref.datetime.php 1/27 Downloads Documentation Get Involved Help Search PHP 5.6.0alpha2 released Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Exceptions Generators References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Context options and parameters Supported Protocols and Wrappers Security Introduction General considerations Installed as CGI binary Installed as an Apache module Filesystem Security Database Security Error Reporting Using Register Globals User Submitted Data Magic Quotes

PHP_ Date_Time Functions - Manual

Embed Size (px)

DESCRIPTION

time manual

Citation preview

Page 1: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 1/27

Downloads

Documentation

Get Involved

Help

Search

PHP 5.6.0alpha2 released

Getting Started

IntroductionA simple tutorial

Language Reference

Basic syntax

Types

Variables

ConstantsExpressions

Operators

Control Structures

Functions

Classes and Objects

NamespacesExceptions

Generators

References Explained

Predefined Variables

Predefined Exceptions

Predefined Interfaces and Classes

Context options and parameters

Supported Protocols and Wrappers

SecurityIntroduction

General considerations

Installed as CGI binary

Installed as an Apache module

Filesystem Security

Database Security

Error Reporting

Using Register Globals

User Submitted Data

Magic Quotes

Page 2: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 2/27

Hiding PHP

Keeping Current

Features

HTTP authentication with PHP

Cookies

SessionsDealing with XForms

Handling file uploads

Using remote files

Connection handling

Persistent Database Connections

Safe Mode

Command line usage

Garbage Collection

DTrace Dynamic Tracing

Function Reference

Affecting PHP's Behaviour

Audio Formats ManipulationAuthentication Services

Command Line Specific ExtensionsCompression and Archive Extensions

Credit Card ProcessingCryptography Extensions

Database ExtensionsDate and Time Related ExtensionsFile System Related Extensions

Human Language and Character Encoding SupportImage Processing and Generation

Mail Related ExtensionsMathematical Extensions

Non-Text MIME OutputProcess Control Extensions

Other Basic ExtensionsOther ServicesSearch Engine Extensions

Server Specific ExtensionsSession Extensions

Text ProcessingVariable and Type Related Extensions

Web ServicesWindows Only Extensions

XML Manipulation

Keyboard Shortcuts?

Page 3: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 3/27

This help

jNext menu item

kPrevious menu item

g pPrevious man page

g nNext man page

GScroll to bottom

g g

Scroll to topg h

Goto homepageg s

Goto search(current page)

/Focus search box

« DatePeriod::__construct

checkdate »

PHP ManualFunction ReferenceDate and Time Related Extensions

Date/Time

Date/TimeIntroduction

Installing/ConfiguringPredefined Constants

DateTimeDateTimeImmutable

DateTimeInterfaceDateTimeZoneDateInterval

DatePeriod

Date/Time FunctionsSupported Date and Time Formats

List of Supported Timezones

Change language: English

Edit Report a Bug

Page 4: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 4/27

Date/Time Functions ¶

Table of Contents ¶

checkdate — Validate a Gregorian date

date_add — Alias of DateTime::adddate_create_from_format — Alias of DateTime::createFromFormat

date_create_immutable_from_format — Alias of DateTimeImmutable::createFromFormat

date_create_immutable — Alias of DateTimeImmutable::__construct

date_create — Alias of DateTime::__constructdate_date_set — Alias of DateTime::setDate

date_default_timezone_get — Gets the default timezone used by all date/time functions in a script

date_default_timezone_set — Sets the default timezone used by all date/time functions in a scriptdate_diff — Alias of DateTime::diff

date_format — Alias of DateTime::format

date_get_last_errors — Alias of DateTime::getLastErrors

date_interval_create_from_date_string — Alias of DateInterval::createFromDateStringdate_interval_format — Alias of DateInterval::format

date_isodate_set — Alias of DateTime::setISODate

date_modify — Alias of DateTime::modify

date_offset_get — Alias of DateTime::getOffsetdate_parse_from_format — Get info about given date formatted according to the specified format

date_parse — Returns associative array with detailed info about given date

date_sub — Alias of DateTime::subdate_sun_info — Returns an array with information about sunset/sunrise and twilight begin/end

date_sunrise — Returns time of sunrise for a given day and location

date_sunset — Returns time of sunset for a given day and location

date_time_set — Alias of DateTime::setTimedate_timestamp_get — Alias of DateTime::getTimestamp

date_timestamp_set — Alias of DateTime::setTimestamp

date_timezone_get — Alias of DateTime::getTimezone

date_timezone_set — Alias of DateTime::setTimezonedate — Format a local time/date

getdate — Get date/time information

gettimeofday — Get current timegmdate — Format a GMT/UTC date/time

gmmktime — Get Unix timestamp for a GMT date

gmstrftime — Format a GMT/UTC time/date according to locale settings

idate — Format a local time/date as integerlocaltime — Get the local time

microtime — Return current Unix timestamp with microseconds

mktime — Get Unix timestamp for a date

strftime — Format a local time/date according to locale settingsstrptime — Parse a time/date generated with strftime

strtotime — Parse about any English textual datetime description into a Unix timestamp

Page 5: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 5/27

time — Return current Unix timestamp

timezone_abbreviations_list — Alias of DateTimeZone::listAbbreviations

timezone_identifiers_list — Alias of DateTimeZone::listIdentifierstimezone_location_get — Alias of DateTimeZone::getLocation

timezone_name_from_abbr — Returns the timezone name from abbreviation

timezone_name_get — Alias of DateTimeZone::getName

timezone_offset_get — Alias of DateTimeZone::getOffsettimezone_open — Alias of DateTimeZone::__construct

timezone_transitions_get — Alias of DateTimeZone::getTransitions

timezone_version_get — Gets the version of the timezonedb

add a note

User Contributed Notes 24 notes

up

down

1brighn (a) yahoo (.) com ¶

11 years ago

I needed a function that determined the last Sunday of the month. Since it's made

for the website's "next meeting" announcement, it goes based on the system clock;

also, if today is between Sunday and the end of the month, it figures out the last

Sunday of *next* month. lastsunday() takes no arguments and returns the date as a

string in the form "January 26, 2003". I could probably have streamlined this quite

a bit, but at least it's transparent code. =)

<?php

/* The two functions calculate when the next meeting will

be, based on the assumption that the meeting will be on

the last Sunday of the month. */

function getlast($mon, $year) {

$daysinmonth = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

$days = $daysinmonth[$mon-1];

if ($mon == 2 && ($year % 4) == 0 && (($year % 100) != 0 ||

($year % 400) == 0)) $days++;

if ($mon == 2 && ($year % 4) == 0 && ($year % 1000) != 0) $days++;

$lastday = getdate(mktime(0,0,0,$mon,$days,$year));

$wday = $lastday['wday'];

return getdate(mktime(0,0,0,$mon,$days-$wday,$year));

}

function lastsunday() {

$today = getdate();

$mon = $today['mon'];

Page 6: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 6/27

$year = $today['year'];

$mday = $today['mday'];

$lastsun = getlast($mon, $year);

$sunday = $lastsun['mday'];

if ($sunday < $mday) {

$mon++;

if ($mon = 13) {

$mon = 1;

$year++;

}

$lastsun = getlast($mon, $year);

$sunday = $lastsun['mday'];

}

$nextmeeting = getdate(mktime(0,0,0,$mon,$sunday,$year));

$month = $nextmeeting['month'];

$mday = $nextmeeting['mday'];

$year = $nextmeeting['year'];

return "$month $mday, $year";

}

?>

updown

1

koch.ro ¶

6 years agoNot really elegant, but tells you, if your installed timezonedb is the most recent:

<?php

class TestDateTimeTimezonedbVersion extends PHPUnit_Framework_TestCase

{

public function testTimezonedbIsMostRecent()

{

ini_set( 'date.timezone', 'Europe/Berlin' );

ob_start();

phpinfo(INFO_MODULES);

$info = ob_get_contents();

ob_end_clean();

$start = strpos( $info, 'Timezone Database Version' ) + 29;

$this->assertTrue( FALSE !== $start, 'Seems there is no timezone DB

installed' );

$end = strpos( $info, "\n", $start );

Page 7: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 7/27

$installedVersion = substr( $info, $start, $end - $start );

exec( 'pecl remote-info timezonedb', &$output );

$availableVersion = substr( $output[2], 12 );

$this->assertEquals( $availableVersion, $installedVersion,

'The installed timezonedb is not actual. Installed: '.$installedVersion

.' available: '.$availableVersion

);

}

}

?>

up

down

0Hans ¶

2 years ago

I needed a way to display an announcement on a shopping site, that would warn users

that orders placed between a certain date range, would not be shipped until after a

certain date.

I created this simple date detection code to display the notice on certain pages.

You can just copy the code and save it to a file on the site and include it anywhere

you need to perform a function, or display a notice.

<?php

/*

Code to show a message only for a certain time frame.

This is a simple include file that can be used to display a message

on any pages that use it.

Simply us a standard include instruction to this file on the page/s where

you want the notice to appear.

Written by Hans Kiesouw - hans at wotworx dot com

*/

$start = new DateTime('30-07-2011'); // DD-MM-YYYY

$endDate= new DateTime('07-08-2011'); // DD-MM-YYYY

$curdate = new DateTime(date('d-m-Y'));

if ($start <= $curdate && $curdate <= $endDate) {

/*

The message below will appear if the current date is between the start and

endDate - used standards HTML to ensure that any code will not be

escaped by PHP. You can use any code here to wish to execute for the

date range.

Page 8: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 8/27

*/

?>

<p><strong><font color="#FF0000">Please Note: Any orders placed between July

30th and August 7th will only be shipped on August 8th. We apologize for any

inconvenience and thank you for your order.</font></strong></p>

<?php

// don't forget this last bit, it ends the if statement!

}

?>

up

down

0

luck dot lil dot leprechaun at gmail dot com ¶4 years ago

This is an easily extendable and pretty way to output human-readable date

differences such as "1 day 2 hours ago", "6 months ago", "3 years 7 months 14 days 1

hour 4 minutes 16 seconds" etc etc.

Change "$levels = 2;" to whatever you want. A value of 1 will limit to only one

number in the result ("3 days ago"). A value of 3 would result in up to three ("3

days 1 hour 2 minutes ago")

It can be used in the following ways:

echo compare_dates($start_date,$end_date);

echo compare_dates($end_date,$start_date);

echo compare_dates($start_date); //end date will be assumed as time();

<?php

function compare_dates($date1, $date2 = time())

{

$blocks = array(

array('name'=>'year','amount' => 60*60*24*365 ),

array('name'=>'month','amount' => 60*60*24*31 ),

array('name'=>'week','amount' => 60*60*24*7 ),

array('name'=>'day','amount' => 60*60*24 ),

array('name'=>'hour','amount' => 60*60 ),

array('name'=>'minute','amount' => 60 ),

array('name'=>'second','amount' => 1 )

);

$diff = abs($date1-$date2);

$levels = 2;

$current_level = 1;

Page 9: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 9/27

$result = array();

foreach($blocks as $block)

{

if ($current_level > $levels) {break;}

if ($diff/$block['amount'] >= 1)

{

$amount = floor($diff/$block['amount']);

if ($amount>1) {$plural='s';} else {$plural='';}

$result[] = $amount.' '.$block['name'].$plural;

$diff -= $amount*$block['amount'];

$current_level++;

}

}

return implode(' ',$result).' ago';

}

?>

[EDIT BY danbrown AT php DOT net: Contains a bugfix supplied by (jorge AT dontspam

DOT com) on 22-OCT-2009.]

up

down

0Robb_Bean at gmx dot nospam dot net ¶

5 years ago

With PHP 5.1 and 5.2 the languages datetime support has changed. Although these

functions should guess your local timezone settings, they may fail if using a

default configuration in a "pre-5.1 way", which means setting no timezone for PHP.

In the case PHP could not get a timezone it emits a E_STRICT warning. Note that this

affects _all_ datetime functions and keep it in mind when porting software from

previous versions to 5.1 or later! It may also confuse your error handling (this is

the way I noticed that things have changed, since these changes are not documentated

_here_).

References:

http://www.php.net/manual/de/migration51.datetime.php

http://www.php.net/manual/de/migration52.datetime.php

up

down

0

venoel at rin dot ru ¶

6 years ago

May be useful for somebody. This function takes on daylight saving time

<?php

Page 10: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 10/27

Function DateDiff($date1,$date2) {

$timedifference=$date2-$date1;

$corr=date("I",$date2)-date("I",$date1);

$timedifference+=$corr;

return $timedifference;

}

?>

Example:

<?php

$d1=mktime(2,0,0,10,28,2007);

$d2=mktime(4,0,0,10,28,2007);

$period=DateDiff($d1,$d2);

printf("<br>%s",date("I d.m.Y H:i",$d1));

printf("<br>%u hour",$period/3600);

printf("<br>%s",date("I d.m.Y H:i",$d2));

?>

Getting 2 hour instead 3.

up

down0

aquatakat at telus dot net ¶

6 years ago

I wrote a simple script to format a duration in seconds. Give the function some

value in seconds and it will return an array.

<?php

function format_duration($seconds) {

$periods = array(

'centuries' => 3155692600,

'decades' => 315569260,

'years' => 31556926,

'months' => 2629743,

'weeks' => 604800,

'days' => 86400,

'hours' => 3600,

'minutes' => 60,

'seconds' => 1

);

$durations = array();

Page 11: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 11/27

foreach ($periods as $period => $seconds_in_period) {

if ($seconds >= $seconds_in_period) {

$durations[$period] = floor($seconds / $seconds_in_period);

$seconds -= $durations[$period] * $seconds_in_period;

}

}

return $durations;

}

echo format_duration(864);

/*

[minutes] => 14

[seconds] => 24

*/

echo format_duration(3600);

/*

[hours] => 1

*/

echo format_duration(11111111);

/*

[months] => 4

[days] => 6

[hours] => 20

[minutes] => 28

[seconds] => 59

*/

?>

updown

0

Leopoldo A dot Oducado (poducado at comfsm dot fm) ¶

7 years ago

Here is my function to count the number days, weeks, months, and year. I tried it

below 1970 and it works.

<?php

Page 12: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 12/27

function datecal($date,$return_value)

{

$date = explode("/", $date);

$month_begin = $date[0];

$month_begin_date = $date[1];

$year1 = $date[2];

$month_end = date("n");

$month_end_date = date("j");

$year2 = date("Y");

$days_old = 0;

$years_old = 0;

$months_old = 0;

if($month_begin==12)

{

$month = 1;

$year = $year1+1;

}

else

{

$month = $month_begin+1;

$year = $year1;

}

$begin_plus_days = cal_days_in_month(CAL_GREGORIAN, $month_begin, $year1) -

$month_begin_date;

$end_minus_days = cal_days_in_month(CAL_GREGORIAN, $month_end, $year2) -

$month_end_date;

while ($year <= $year2)

{

if($year == $year2)

{

$days_old = $days_old + cal_days_in_month(CAL_GREGORIAN, $month, $year);

if($month < $month_end)

{

$months_old = $months_old + 1;

$month = $month + 1;

}

elseif ($month==$month_end and $month_end_date >= $month_begin_date)

{

$year = $year2+1;

}

else

{

$year = $year2+1;

}

}

Page 13: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 13/27

else

{

$days_old = $days_old + cal_days_in_month(CAL_GREGORIAN, $month, $year);

if ($month <= 11)

{

$month = $month + 1;

$months_old = $months_old + 1;

}

else

{

$month = 1;

$year = $year + 1;

$months_old = $months_old + 1;

}

}

}

$days_old = ($days_old + $begin_plus_days) - $end_minus_days;

if($return_value == "d")

{ return $days_old; }

elseif ($return_value == "w")

{ return intval($days_old/7); }

elseif ($return_value == "m")

{ return $months_old; }

elseif ($return_value == "y")

{ return intval($months_old/12); }

}

echo datecal("08/13/1975","m");

?>

up

down0

bgold at matrix-consultants dot com ¶7 years agoWhen debugging code that stores date/time values in a database, you may find

yourself wanting to know the date/time that corresponds to a given unix timestamp,

or the timestamp for a given date & time.

The following script will do the conversion either way. If you give it a numeric

timestamp, it will display the corresponding date and time. If you give it a date

and time (in almost any standard format), it will display the timestamp.

All conversions are done for your locale/time zone.

<?php

Page 14: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 14/27

while (true)

{

// Read a line from standard in.

echo "enter time to convert: ";

$inline = fgets(STDIN);

$inline = trim($inline);

if ($inline == "" || $inline == ".")

break;

// See if the line is a date.

$pos = strpos($inline, "/");

if ($pos === false) {

// not a date, should be an integer.

$date = date("m/d/Y G:i:s", $inline);

echo "int2date: $inline -> $date\n";

} else {

$itime = strtotime($inline);

echo "date2int: $inline -> $itime\n";

}

}

?>

up

down0

andreencinas at yahoo dot com dot br ¶8 years ago<?php

//function like dateDiff Microsoft

//not error in year Bissesto

function dateDiff($interval,$dateTimeBegin,$dateTimeEnd) {

//Parse about any English textual datetime

//$dateTimeBegin, $dateTimeEnd

$dateTimeBegin=strtotime($dateTimeBegin);

if($dateTimeBegin === -1) {

return("..begin date Invalid");

}

$dateTimeEnd=strtotime($dateTimeEnd);

if($dateTimeEnd === -1) {

return("..end date Invalid");

}

$dif=$dateTimeEnd - $dateTimeBegin;

Page 15: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 15/27

switch($interval) {

case "s"://seconds

return($dif);

case "n"://minutes

return(floor($dif/60)); //60s=1m

case "h"://hours

return(floor($dif/3600)); //3600s=1h

case "d"://days

return(floor($dif/86400)); //86400s=1d

case "ww"://Week

return(floor($dif/604800)); //604800s=1week=1semana

case "m": //similar result "m" dateDiff Microsoft

$monthBegin=(date("Y",$dateTimeBegin)*12)+

date("n",$dateTimeBegin);

$monthEnd=(date("Y",$dateTimeEnd)*12)+

date("n",$dateTimeEnd);

$monthDiff=$monthEnd-$monthBegin;

return($monthDiff);

case "yyyy": //similar result "yyyy" dateDiff Microsoft

return(date("Y",$dateTimeEnd) - date("Y",$dateTimeBegin));

default:

return(floor($dif/86400)); //86400s=1d

}

}

?>

up

down0

glashio at xs4all dot nl ¶8 years ago

Calculate Sum BusinessDays (Mon till Fri) between two date's :

<?php

function businessdays($begin, $end) {

$rbegin = is_string($begin) ? strtotime(strval($begin)) : $begin;

$rend = is_string($end) ? strtotime(strval($end)) : $end;

Page 16: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 16/27

if ($rbegin < 0 || $rend < 0)

return 0;

$begin = workday($rbegin, TRUE);

$end = workday($rend, FALSE);

if ($end < $begin) {

$end = $begin;

$begin = $end;

}

$difftime = $end - $begin;

$diffdays = floor($difftime / (24 * 60 * 60)) + 1;

if ($diffdays < 7) {

$abegin = getdate($rbegin);

$aend = getdate($rend);

if ($diffdays == 1 && ($astart['wday'] == 0 || $astart['wday'] == 6) &&

($aend['wday'] == 0 || $aend['wday'] == 6))

return 0;

$abegin = getdate($begin);

$aend = getdate($end);

$weekends = ($aend['wday'] < $abegin['wday']) ? 1 : 0;

} else

$weekends = floor($diffdays / 7);

return $diffdays - ($weekends * 2);

}

function workday($date, $begindate = TRUE) {

$adate = getdate($date);

$day = 24 * 60 * 60;

if ($adate['wday'] == 0) // Sunday

$date += $begindate ? $day : -($day * 2);

elseif ($adate['wday'] == 6) // Saterday

$date += $begindate ? $day * 2 : -$day;

return $date;

}

?>

updown0

daniel at globalnetstudios dot com ¶8 years ago

This dateDiff() function can take in just about any timestamp, including UNIX

timestamps and anything that is accepted by strtotime(). It returns an array with

Page 17: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 17/27

the ability to split the result a couple different ways. I built this function to

suffice any datediff needs I had. Hope it helps others too.

<?php

/********* dateDiff() function **********

* returns Array of Int values for difference between two dates

* $date1 > $date2 --> positive integers are returned

* $date1 < $date2 --> negative integers are returned

*

* $split recognizes the following:

* 'yw' = splits up years, weeks and days (default)

* 'y' = splits up years and days

* 'w' = splits up weeks and days

* 'd' = total days

*

* examples:

* $dif1 = dateDiff() or dateDiff('yw')

* $dif2 = dateDiff('y')

* $dif3 = dateDiff('w')

* $dif4 = dateDiff('d')

*

* assuming dateDiff returned 853 days, the above

* examples would have a print_r output of:

* $dif1 == Array( [y] => 2 [w] => 17 [d] => 4 )

* $dif2 == Array( [y] => 2 [d] => 123 )

* $dif3 == Array( [w] => 121 [d] => 6 )

* $dif4 == Array( [d] => 847 )

*

* note: [h] (hours), [m] (minutes), [s] (seconds) are always returned as elements

of the Array

*/

function dateDiff($dt1, $dt2, $split='yw') {

$date1 = (strtotime($dt1) != -1) ? strtotime($dt1) : $dt1;

$date2 = (strtotime($dt2) != -1) ? strtotime($dt2) : $dt2;

$dtDiff = $date1 - $date2;

$totalDays = intval($dtDiff/(24*60*60));

$totalSecs = $dtDiff-($totalDays*24*60*60);

$dif['h'] = $h = intval($totalSecs/(60*60));

$dif['m'] = $m = intval(($totalSecs-($h*60*60))/60);

$dif['s'] = $totalSecs-($h*60*60)-($m*60);

// set up array as necessary

switch($split) {

case 'yw': # split years-weeks-days

$dif['y'] = $y = intval($totalDays/365);

$dif['w'] = $w = intval(($totalDays-($y*365))/7);

Page 18: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 18/27

$dif['d'] = $totalDays-($y*365)-($w*7);

break;

case 'y': # split years-days

$dif['y'] = $y = intval($totalDays/365);

$dif['d'] = $totalDays-($y*365);

break;

case 'w': # split weeks-days

$dif['w'] = $w = intval($totalDays/7);

$dif['d'] = $totalDays-($w*7);

break;

case 'd': # don't split -- total days

$dif['d'] = $totalDays;

break;

default:

die("Error in dateDiff(). Unrecognized \$split parameter. Valid values are

'yw', 'y', 'w', 'd'. Default is 'yw'.");

}

return $dif;

}

?>

updown

0mail at completeideas dot com ¶

8 years agoFor those who are using pre MYSQL 4.1.1, you can use:

TO_DAYS([Date Value 1])-TO_DAYS([Date Value 2])

For the same result as:

DATEDIFF([Date Value 1],[Date Value 2])

updown

0mincklerstraat at softhome dot net ¶

9 years agoBefore you get too advanced using date functions, be sure also to see the calendar

functions at http://www.php.net/manual/en/ref.calendar.php .

updown

0nickaubert at america's biggest isp dot com ¶

9 years agoI ran into an issue using a function that loops through an array of dates where the

Page 19: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 19/27

keys to the array are the Unix timestamp for midnight for each date. The loop

starts at the first timestamp, then incremented by adding 86400 seconds (ie. 60 x 60

x 24). However, Daylight Saving Time threw off the accuracy of this loop, since

certain days have a duration other than 86400 seconds. I worked around it by adding

a couple of lines to force the timestamp to midnight at each interval.

<?php

$ONE_DAY = 90000; // can't use 86400 because some days have one hour more or

less

for ( $each_timestamp = $start_time ; $each_timestamp <= $end_time ;

$each_timestamp += $ONE_DAY) {

/* force midnight to compensate for daylight saving time */

$this_timestamp_array = getdate( $each_timestamp );

$each_timestamp = mktime ( 0 , 0 , 0 , $this_timestamp_array[mon] ,

$this_timestamp_array[mday] , $this_timestamp_array[year] );

// do some stuff...

}

?>

up

down0

php at sarge dot ch ¶10 years agoAdditional thisone here (didn't test it yet but should work :D):

<?php

/**

* Calculates the Difference between two timestamps

*

* @param integer $start_timestamp

* @param integer $end_timestamp

* @param integer $unit (default 0)

* @return string

* @access public

*/

function dateDifference($start_timestamp,$end_timestamp,$unit= 0){

$days_seconds_star= (23 * 56 * 60) + 4.091; // Star Day

$days_seconds_sun= 24 * 60 * 60; // Sun Day

$difference_seconds= $end_timestamp - $start_timestamp;

switch($unit){

case 3: // Days

$difference_days= round(($difference_seconds / $days_seconds_sun),2);

return 'approx. '.$difference_hours.' Days';

Page 20: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 20/27

case 2: // Hours

$difference_hours= round(($difference_seconds / 3600),2);

return 'approx. '.$difference_hours.' Hours';

break;

case 1: // Minutes

$difference_minutes= round(($difference_seconds / 60),2);

return 'approx. '.$difference_minutes.' Minutes';

break;

default: // Seconds

if($difference_seconds > 1){

return $difference_seconds.' Seconds';

}

else{

return $difference_seconds.' Second';

}

}

}

?>

updown

0php at elmegil dot net ¶

10 years agoA much easier way to do days diff is to use Julian Days from the Calendar functions:

$start = gregoriantojd($smon, $sday, $syear);

$end = gregoriantojd($emon, $eday, $eyear);

$daysdiff = $end - $start;

You can see the obvious ways to wrap a function around that.

up

down0garyc at earthling dot net ¶

10 years agoI needed to calculate the week number from a given date and vice versa, where the

week starts with a Monday and the first week of a year may begin the year before, if

the year begins in the middle of the week (Tue-Sun). This is the way weekly

magazines calculate their issue numbers.

Here are two functions that do exactly that:

Hope somebody finds this useful.

Gary

Page 21: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 21/27

<?php

/* w e e k n u m b e r -------------------------------------- //

weeknumber returns a week number from a given date (>1970, <2030)

Wed, 2003-01-01 is in week 1

Mon, 2003-01-06 is in week 2

Wed, 2003-12-31 is in week 53, next years first week

Be careful, there are years with 53 weeks.

// ------------------------------------------------------------ */

function weeknumber ($y, $m, $d) {

$wn = strftime("%W",mktime(0,0,0,$m,$d,$y));

$wn += 0; # wn might be a string value

$firstdayofyear = getdate(mktime(0,0,0,1,1,$y));

if ($firstdayofyear["wday"] != 1) # if 1/1 is not a Monday, add 1

$wn += 1;

return ($wn);

} # function weeknumber

/* d a t e f r o m w e e k ---------------------------------- //

From a weeknumber, calculates the corresponding date

Input: Year, weeknumber and day offset

Output: Exact date in an associative (named) array

2003, 12, 0: 2003-03-17 (a Monday)

1995, 53, 2: 1995-12-xx

...

// ------------------------------------------------------------ */

function datefromweek ($y, $w, $o) {

$days = ($w - 1) * 7 + $o;

$firstdayofyear = getdate(mktime(0,0,0,1,1,$y));

if ($firstdayofyear["wday"] == 0) $firstdayofyear["wday"] += 7;

# in getdate, Sunday is 0 instead of 7

$firstmonday = getdate(mktime(0,0,0,1,1-$firstdayofyear["wday"]+1,$y));

$calcdate = getdate(mktime(0,0,0,$firstmonday["mon"],

$firstmonday["mday"]+$days,$firstmonday["year"]));

$date["year"] = $calcdate["year"];

$date["month"] = $calcdate["mon"];

$date["day"] = $calcdate["mday"];

return ($date);

Page 22: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 22/27

} # function datefromweek

?>

updown

0nightowl at NOS-PA-M dot uk2 dot net ¶

11 years agoI wanted to find all records in my database which match the current week (for a

call-back function). I made up this function to find the start and end of the

current week :

<?php

function week($curtime) {

$date_array = getdate (time());

$numdays = $date_array["wday"];

$startdate = date("Y-m-d", time() - ($numdays * 24*60*60));

$enddate = date("Y-m-d", time() + ((7 - $numdays) * 24*60*60));

$week['start'] = $startdate;

$week['end'] = $enddate;

return $week;

}

?>

updown

0php-contrib at i-ps dot nospam dot net ¶

12 years agoSomeone may find this info of some use:

Rules for calculating a leap year:

1) If the year divides by 4, it is a leap year (1988, 1992, 1996 are leap years)

2) Unless it divides by 100, in which case it isn't (1900 divides by 4, but was not

a leap year)

3) Unless it divides by 400, in which case it is actually a leap year afterall (So

2000 was a leap year).

In practical terms, to work out the number of days in X years, multiply X by

365.2425, rounding DOWN to the last whole number, should give you the number of

days.

Page 23: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 23/27

The result will never be more than one whole day inaccurate, as opposed to

multiplying by 365, which, over more years, will create a larger and larger deficit.

updown

0th at definitynet dot com ¶

13 years agoI had some problems with dates between mySQL and PHP. PHP had all these great date

functions but I wanted to store a usable value in my database tables. In this case I

was using TIMESTAMP(14) <or 'YYYYMMDDHHMMSS'>.

This is perhaps the easiest way I have found to pull the PHP usable UNIX Datestamp

from my mySQL datestamp stored in the tables:

Use the mySQL UNIX_TIMESTAMP() function in your SQL definition string. i.e.

$sql= "SELECT field1, field2, UNIX_TIMESTAMP(field3) as your_date

FROM your_table

WHERE field1 = '$value'";

The query will return a temp table with coulms "field1" "Field2" "your_date"

The "your_date" will be formatted in a UNIX TIMESTAMP! Now you can use the PHP

date() function to spew out nice date formats.

Sample using above $sql:

20010111002747 = Date Stored on mySQL table (TIMESTAMP(14))

979172867 = value returned as your_date in sql stmt (UNIX_TIMESTAMP)

if we use $newdate = date("F jS, Y -- g:ia", $row["your_date"]);

--(after fetching our array from the sql results of course)--

echo "$newdate"; --Will produce:

January 11th, 2001 -- 12:27am

Hope this helps someone out there!

updown

-1sagar ¶5 years ago<?php

####################################

# Provide week number and get start_timestamp and end_timestamp

#####################################

Page 24: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 24/27

up

down-1Darren Edwards ¶6 years ago

// this week number will come from the timeshare form

$week = 51;

$times = get_start_and_end_date_from_week($week);

$start_time = $times['start_timestamp'];

$end_time = $times['end_timestamp'];

function get_start_and_end_date_from_week ($w)

{

$y = date("Y", time());

$o = 6; // week starts from sunday by default

$days = ($w - 1) * 7 + $o;

$firstdayofyear = getdate(mktime(0,0,0,1,1,$y));

if ($firstdayofyear["wday"] == 0) $firstdayofyear["wday"] += 7;

# in getdate, Sunday is 0 instead of 7

$firstmonday = getdate(mktime(0,0,0,1,1-$firstdayofyear["wday"]+1,$y));

$calcdate = getdate(mktime(0,0,0,$firstmonday["mon"],

$firstmonday["mday"]+$days,$firstmonday["year"]));

$sday = $calcdate["mday"];

$smonth = $calcdate["mon"];

$syear = $calcdate["year"];

$timestamp['start_timestamp'] = mktime(0, 0, 0, $smonth, $sday, $syear);

$timestamp['end_timestamp'] = $timestamp['start_timestamp'] + (60*60*24*7);

return $timestamp;

} # function datefromweek

?>

I was looking for a solution where I could return the number of days, hours, Minutes

and seconds between two entries in a table.

DATE_DIFF is not running on my mysql server as my provider uses mysql version 4.0.25

Solution was to use to days and std time functions to calculate the difference in

one call.

The fields stored in the table(report_table) are

Page 25: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 25/27

updown-2stoicnluv at gmail dot com ¶

6 years ago

time(00:00:00),

date(0000-00-00) and record(enum) which tells the app the type of log stored. EG

start or end of a report.

SELECT

(TO_DAYS( end .date ) - TO_DAYS( start .date ))

-

( second( end .time ) + (minute( end .time )*60) + (hour( end .time )*3600)

<

second( start .time ) + (minute( start .time )*60) + (hour( start .time

)*3600))

AS days ,

SEC_TO_TIME(

(second( end .time ) + (minute( end .time )*60) + (hour( end .time )*3600)

)

-

(second( start .time ) + (minute( start .time )*60) + (hour( start .time

)*3600) )

) AS hms,

start .time as start,

end .time as end

FROM report_table AS start , report_table AS end

AND start .record = 'Report Begin'

AND end .record = 'Report End'

LIMIT 1

If there is no end of report then it will not return a result, as you would expect.

A better and accurate function to calculate the difference between 2 dates. Takes

leap years and DST into consideration. Accepts string date or timestamp as

arguments.

<?php

function date_diff($d1, $d2){

$d1 = (is_string($d1) ? strtotime($d1) : $d1);

$d2 = (is_string($d2) ? strtotime($d2) : $d2);

$diff_secs = abs($d1 - $d2);

$base_year = min(date("Y", $d1), date("Y", $d2));

Page 26: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 26/27

add a note

Copyright © 2001-2014 The PHP Group

$diff = mktime(0, 0, $diff_secs, 1, 1, $base_year);

return array(

"years" => date("Y", $diff) - $base_year,

"months_total" => (date("Y", $diff) - $base_year) * 12 + date("n", $diff) -

1,

"months" => date("n", $diff) - 1,

"days_total" => floor($diff_secs / (3600 * 24)),

"days" => date("j", $diff) - 1,

"hours_total" => floor($diff_secs / 3600),

"hours" => date("G", $diff),

"minutes_total" => floor($diff_secs / 60),

"minutes" => (int) date("i", $diff),

"seconds_total" => $diff_secs,

"seconds" => (int) date("s", $diff)

);

}

$a = date_diff("2006-11-01", "2007-11-01");

echo "<pre>";

print_r($a);

echo "</pre>";

?>

This example will output (if your timezone uses US DST):

Array

(

[years] => 0

[months_total] => 11

[months] => 11

[days_total] => 364

[days] => 30

[hours_total] => 8759

[hours] => 23

[minutes_total] => 525540

[minutes] => 0

[seconds_total] => 31532400

[seconds] => 0

)

As you can see, the result is not exactly 1 year (less 1 hour) since Nov 1, 2006 is

not DST while Nov 1, 2007 is DST.

Page 27: PHP_ Date_Time Functions - Manual

2/17/14 PHP: Date/Time Functions - Manual

www.php.net/manual/en/ref.datetime.php 27/27

My PHP.net

ContactOther PHP.net sitesMirror sitesPrivacy policy