Here's a function I made to make an array containing all days in a given year:
<?php
# Usage: generateYearArray(int $fyear);
# $fyear is the year that you want dates for.
function generateYearArray($fyear) {
$feb = cal_days_in_month(CAL_GREGORIAN, 2, $fyear);
$daysInYear = ($feb === 29) ? 366 : 365;
$array = array();
while ($daysInYear > 0) {
$array[] = date("Y-m-d", mktime(0, 0, 0, 1, $daysInYear, $fyear));
$daysInYear--;
}
sort($array);
return $array;
}
?>
Example:
generateYearArray(2008);
should return an array like:
Array(
[0] => "2008-01-01",
[1] => "2008-01-02",
...
[363] => "2008-12-29",
[364] => "2008-12-30",
[365] => "2008-12-31"
)
This function is released into the public domain.
mktime
(PHP 4, PHP 5)
mktime — Get Unix timestamp for a date
Description
Returns the Unix timestamp corresponding to the arguments given. This timestamp is a long integer containing the number of seconds between the Unix Epoch (January 1 1970 00:00:00 GMT) and the time specified.
Arguments may be left out in order from right to left; any arguments thus omitted will be set to the current value according to the local date and time.
Parameters
- hour
-
The number of the hour.
- minute
-
The number of the minute.
- second
-
The number of seconds past the minute.
- month
-
The number of the month.
- day
-
The number of the day.
- year
-
The number of the year, may be a two or four digit value, with values between 0-69 mapping to 2000-2069 and 70-100 to 1970-2000. On systems where time_t is a 32bit signed integer, as most common today, the valid range for year is somewhere between 1901 and 2038. However, before PHP 5.1.0 this range was limited from 1970 to 2038 on some systems (e.g. Windows).
- is_dst
-
This parameter can be set to 1 if the time is during daylight savings time (DST), 0 if it is not, or -1 (the default) if it is unknown whether the time is within daylight savings time or not. If it's unknown, PHP tries to figure it out itself. This can cause unexpected (but not incorrect) results. Some times are invalid if DST is enabled on the system PHP is running on or is_dst is set to 1. If DST is enabled in e.g. 2:00, all times between 2:00 and 3:00 are invalid and mktime() returns an undefined (usually negative) value. Some systems (e.g. Solaris 8) enable DST at midnight so time 0:30 of the day when DST is enabled is evaluated as 23:30 of the previous day.
Note: As of PHP 5.1.0, this parameter became deprecated. As a result, the new timezone handling features should be used instead.
Return Values
mktime() returns the Unix timestamp of the arguments given. If the arguments are invalid, the function returns FALSE (before PHP 5.1 it returned -1).
Errors/Exceptions
Every call to a date/time function will generate a E_NOTICE if the time zone is not valid, and/or a E_STRICT message if using the system settings or the TZ environment variable. See also date_default_timezone_set()
ChangeLog
| Version | Description |
|---|---|
| 3.0.10 | Added is_dst parameter |
| 5.1.0 | The is_dst parameter became deprecated. Made the function return FALSE on error, instead of -1. Fixed the function to accept the year, month and day to be all passed as zero. |
| 5.1.0 | Now issues the E_STRICT and E_NOTICE time zone errors. |
Examples
Example #1 mktime() example
mktime() is useful for doing date arithmetic and validation, as it will automatically calculate the correct value for out-of-range input. For example, each of the following lines produces the string "Jan-01-1998".
<?php
echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997));
echo date("M-d-Y", mktime(0, 0, 0, 13, 1, 1997));
echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 1998));
echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 98));
?>
Example #2 Last day of next month
The last day of any given month can be expressed as the "0" day of the next month, not the -1 day. Both of the following examples will produce the string "The last day in Feb 2000 is: 29".
<?php
$lastday = mktime(0, 0, 0, 3, 0, 2000);
echo strftime("Last day in Feb 2000 is: %d", $lastday);
$lastday = mktime(0, 0, 0, 4, -31, 2000);
echo strftime("Last day in Feb 2000 is: %d", $lastday);
?>
Notes
Before PHP 5.1.0, negative timestamps were not supported under any known version of Windows and some other systems as well. Therefore the range of valid years was limited to 1970 through 2038.
mktime
01-Jun-2008 10:34
21-May-2008 05:34
This script is for creating servertime with auto detect server timezone.
<?php
$month = date(m); //* Get Current Month //
$day = date(j); //* Get Current Day //
$year = date(Y); //* Get Current Year //
$hour = date(G); //* Get Current Hour (24 Hours Format) //
$min = date(i); //* Get Current Minutes //
$sec = date(s); //* Get Current Seconds //
$gmt = date(O); //* Get Current Timezone //
$servertime = date("D \\- M j\\, Y \\- g:i A", mktime($hour+$gmt, $minutes, $sec, $month, $day, $year, 0));
print $servertime;
?>
If you want to input a multiple timezone. just copy the "$gmt = date(O). Then add increments to "$gmt" and replace the "date(O)" to any timezone you want.
For example:
I need only 2 timezone, Standard GMT and Pacific Timezone.
I will remove "$gmt" and replace it with "$gmt1" and "$gmt2".
Then for "$gmt1" I will replace the "date(O)" with 0, so my Timezone1 is equal to Standard GMT.
Then for "$gmt2" I will replace the "date(O)" with -8, so my Timezone2 is equal to Pacific Timezone.
To get the output for two timezone we need also two output script.
<?php
echo date("D \\- M j\\, Y \\- g:i A", mktime($hour+$gmt1, $minutes, $sec, $month, $day, $year, 0));
echo date("D \\- M j\\, Y \\- g:i A", mktime($hour+$gmt2, $minutes, $sec, $month, $day, $year, 0));
?>
Enjoy scripting,
-JhunTech09
13-May-2008 07:34
It seems mktime() doesn't return negative timestamps on Linux systems with a version of glibc <= 2.3.3.
21-Mar-2008 07:05
Another useful function that I have created years ago. Useful for all calendar applications, if you have to switch to a date given by a week number and a specific day (e.g. tuesday in week 12: mktimefromcw(2008, 12, 2)).
<?php
/**
* @return timestamp
* @param integer year
* @param integer woy
* @param integer dow
* @desc This function retrieves the time for the given year, week of year and day of the week and returns it.
*/
function mktimefromcw($year, $woy=1, $dow=1) {
# $year = year (four digits)
# $woy = week of the year (1..53)
# $dow = day of the week (1..7)
$dow = ($dow) % 7;
$woy = ($woy) - 1;
# Get reference value (this is the first monday of the first week of the year, not easy to calculate)
$fdoy_timestamp = mktime(0,0,0,1,1,$year);
$fdoy = ((date("w", $fdoy_timestamp) + 6) % 7) + 1;
if($fdoy == 1) {
# This first day of the year is a monday
$fcwstart = $fdoy_timestamp;
}
elseif($fdoy < 5) {
# The first day if before Friday, therefor the first Monday can be found in the previos year (this is no fun, believe in it!).
$fcwstart = strtotime("last Monday", $fdoy_timestamp);
}
else {
# The first day is a friday or later, so the first days belong to calender week 53 (yes, this is possible!) of the previous year, do not count them for this year.
$fcwstart = strtotime("next Monday", $fdoy_timestamp);
}
# Create timestamp
$timestr = date("d F Y", $fcwstart)." +$woy week +$dow day";
$time = strtotime($timestr);
# Return timestamp
return $time;
}
?>
16-Mar-2008 11:13
Here some example i have implemented. I think it will be helpful someone
<?php
function fullDateFormat( $value ){
$d = explode("-", $value);
$cdate = date ("F j, Y", mktime (0,0,0,$d[1],$d[2],$d[0]));
echo $cdate;
}
//-----Enter date format like mysql date (e.g. 2000-01-30)------//
fullDateFormat("2008-03-17");
//Output like: March 17, 2008
function detailsDateFormat( $value ){
$d = explode("-", $value);
$cdate = date ("l F j, Y", mktime (0,0,0,$d[1],$d[2],$d[0]));
echo $cdate;
}
//-----Enter date format like mysql date (e.g. 2000-01-30)------//
detailsDateFormat("2008-03-17");
//Output like: Monday March 17, 2008
?>
05-Mar-2008 01:45
Converting date() style strings to unix epoch time was giving me an "A non well formed numeric value encountered in" error. Simply resolved with an (int) call on the string:
<?php
$ue_time = time();
$old_date = date('Y-m-d');
$old_time = date('h:i');
$new_date = str_replace('-', ', ', $old_date);
$new_time = str_replace(':', ', ', $old_time);
$convert_date = $new_time.', '.$new_date;
$convert_date = (int)$convert_date;
$converted = mktime ($convert_date);
echo $ue_time.' vs '.$old_date.' '.$old_time.' converted = '.$converted;
?>
20-Feb-2008 01:21
<?php
//Beware of this when comparing dates:
function daysBetween($date1, $date2)
{
$d1 = explode("-", $date1);
$d2 = explode("-", $date2);
$year1 = $d1[0];
$month1 = $d1[1];
$day1 = $d1[2];
$year2 = $d2[0];
$month2 = $d2[1];
$day2 = $d2[2];
$deadline1 = mktime(0, 0, 0, $month1, $day1, $year1, 0);
$deadline2 = mktime(0, 0, 0, $month2, $day2, $year2, 0);
/* If you dont put 0 at last parameter both mktime calls, and
a Daylight Saving Time is not specified,
a float days number can be returned. Is better to pass 0
in both mktimes and round the result: */
$res = round( ($deadline2 - $deadline1) / (60 * 60 * 24) );
return $res;
}
/* My Test dates: */
echo daysBetween('2008-3-5','2008-3-11');
?>
30-Jan-2008 12:58
Just a small thing to think about if you are only trying to pull the month out using mktime and date. Make sure you place a 1 into day field. Otherwise you will get incorrect dates when a month is followed by a month with less days when the day of the current month is higher then the max day of the month you are trying to find.. (Such as today being Jan 30th and trying to find the month Feb.)
17-Jan-2008 10:42
Taking a sample from a fellow poster a bit up, I've made this quite simple MYSQL date to timestamp which will convert both date or date/time fields.
<?php
function MySQLtoTimestamp($mysqlDate) {
if (strlen($mysqlDate) > 10) {
list($year, $month, $day_time) = explode('-', $mysqlDate);
list($day, $time) = explode(" ", $day_time);
list($hour, $minute, $second) = explode(":", $time);
$ts = mktime($hour, $minute, $second, $month, $day, $year);
} else {
list($year, $month, $day) = explode('-', $mysqlDate);
$ts = mktime(0, 0, 0, $month, $day, $year);
}
return $ts;
}
?>
27-Dec-2007 12:39
There was one requirement of finding recurring date for daily, monthly, quarterly and yearly subscription.
Following is the example to find out next recurring dates.
Logic : Code is taking care of following things.
1. Date is valid date
2. If next recurring date is not valid than it will take last date of month.
3. This code will useful to those who are interested to keep track of recurring payments on his own database
rather than payment gateway.
4. Code will allow you to find dates for daily, monthly, quarterly and yearly.
<?PHP
function getDates($bdate,$duration) {
$aDate = explode("-",$bdate);
$datetime = mktime(0, 0, 0, $aDate[1], $aDate[2], $aDate[0]);
switch($duration) {
case 0:
for($i=0;$i<12;$i++) {
$nextmonth = date("Y-m-d",mktime(0, 0, 0, date("m",$datetime),
date("d",$datetime)+1+$i, date("Y",$datetime)));
echo $nextmonth."<br><br>";
}
break;
case 1:
for($i=0;$i<12;$i++) {
$tempnextmonth = ($aDate[1]+1+$i)%12;
if($tempnextmonth == 0) {
$tempnextmonth = 12;
}
$nextyear = date("Y",mktime(0, 0, 0, date("m",$datetime)+1+$i,
date("d",$datetime), date("Y",$datetime)));
if (checkdate(str_pad($tempnextmonth,2,0,STR_PAD_LEFT),
$aDate[2],$nextyear) == false) {
echo $nextyear."-".str_pad($tempnextmonth,2,0,STR_PAD_LEFT)."-".
date('d', mktime(0, 0, 0, ($tempnextmonth + 1), 0, $nextyear))
."<br><br>";
}
else {
echo $nextyear."-".str_pad($tempnextmonth,2,0,STR_PAD_LEFT)."-".
$aDate[2]."<br><br>";
}
}
break;
case 2:
for($i=0;$i<12;$i++) {
$tempnextmonth = ($aDate[1]+4+(4*$i))%12;
if($tempnextmonth == 0) {
$tempnextmonth = 12;
}
$nextyear = date("Y",mktime(0, 0, 0, date("m",$datetime)+4+(4*$i),
date("d",$datetime), date("Y",$datetime)));
if (checkdate(str_pad($tempnextmonth,2,0,STR_PAD_LEFT),
$aDate[2],$nextyear) == false) {
echo $nextyear."-".str_pad($tempnextmonth,2,0,STR_PAD_LEFT)."-".
date('d', mktime(0, 0, 0, ($tempnextmonth + 1), 0, $nextyear)).
"<br><br>";
}
else {
echo $nextyear."-".str_pad($tempnextmonth,2,0,STR_PAD_LEFT)."-".
$aDate[2]."<br><br>";
}
}
break;
case 3:
for($i=0;$i<12;$i++) {
$nextmonth = date("Y-m-d",mktime(0, 0, 0, date("m",$datetime),
date("d",$datetime), date("Y",$datetime)+1+$i));
echo $nextmonth."<br><br>";
}
break;
}
}
?>
How to use this function?
<?PHP getDates(date("Y-m-d"),$period); ?>
You can set $period as your recurring period time.
0 - Daily Dates
1 - Monthly Dates
2 - Quarterly Dates
3 - Yearly Dates
17-Nov-2007 06:54
I made this simple class to add/remove time to my subscription service. It makes it easy to make new time without having to write the whole mktime line everytime. I'm posting it here, as it might help somebody.
<?php
class mkTime {
var $day = 0;
var $month = 0;
var $year = 0;
var $hour = 0;
var $minute = 0;
var $sec = 0;
var $iniTime;
var $returnFormat = "Y-m-d H:i:s";
function addTime() {
$newTime = mktime(
date("H",$this->iniTime)+$this->hour,
date("i",$this->iniTime)+$this->minute,
date("s",$this->iniTime)+$this->sec,
date("m",$this->iniTime)+$this->month,
date("d",$this->iniTime)+$this->day,
date("Y",$this->iniTime)+$this->year
);
$rtnTime = date($this->returnFormat,$newTime);
return $rtnTime;
}
function removeTime() {
$newTime = mktime(
date("H",$this->iniTime)-$this->hour,
date("i",$this->iniTime)-$this->minute,
date("s",$this->iniTime)-$this->sec,
date("m",$this->iniTime)-$this->month,
date("d",$this->iniTime)-$this->day,
date("Y",$this->iniTime)-$this->year
);
$rtnTime = date($this->returnFormat,$newTime);
return $rtnTime;
}
}
$t = new mkTime; // call the class
$t->iniTime = time(); // set initial time
$t->year = 1; // add/remove a year
$newTime = $t->addTime(); // call the add time function
echo "$newTime<br/><br/>"; // write result to browser
$t = new mkTime; // call the class
$t->iniTime = time(); // set initial time
$t->year = 1; // add/remove a year
$t->returnFormat = "d/m-Y @ H:i:s"; // time return format
$newTime = $t->removeTime(); // call the remove time function
echo "$newTime<br/><br/>"; // write result to browser
?>
06-Sep-2007 10:58
The maximum possible date accepted by mktime() and gmmktime() is dependent on the current location time zone.
For example, the 32-bit timestamp overflow occurs at 2038-01-19T03:14:08+0000Z. But if you're in a UTC -0500 time zone (such as EST in North America), the maximum accepted time before overflow (for older PHP versions on Windows) is 2038-01-18T22:14:07-0500Z, regardless of whether you're passing it to mktime() or gmmktime().
31-Aug-2007 07:31
NB: one 'gotcha' with the implementation of mktime()'s parameters:
<?php
for( $i = 1 ; $i <= 12 ; $i++ )
{
echo "Month '$i' is: " . date( "F" , mktime( 0 , 0 , 0 , $i ) ) . "\n";
}
?>
Will output:
Month '1' is: January
Month '2' is: March
Month '3' is: March
Month '4' is: May
Month '5' is: May
Month '6' is: July
Month '7' is: July
Month '8' is: August
Month '9' is: October
Month '10' is: October
Month '11' is: December
Month '12' is: December
on the 31st day of every month.
Why? Because the 5th parameter "day" defaults to "right now," which will not work reliably for days after the 28th.
To make sure this doesn't happen, specify the first day of the month:
<?php
mktime( 0 , 0 , 0 , $i , 1 )
?>
01-Aug-2007 08:46
As per derrick miller's contribution for MySQL date stamps (which equally applies to pgSQL)... I find this processes a little faster than exploding the string:
(All done in one statement)
<?php
function unix_date($input_date)
{ // take date string such as "1985-07-25" and return the Unix timestamp
return mktime(0, 0, 0, substr($input_date, 5, 2), substr($input_date, 8, 2), substr($input_date, 0,4));
}
?>
16-Jul-2007 09:52
Finding out the number of days in a given month and year, accounting for leap years when February has more than 28 days.
<?php
function days_in_month($year, $month) {
return( date( "t", mktime( 0, 0, 0, $month, 1, $year) ) );
}
?>
Hope it helps a soul out there.
11-Jul-2007 06:04
It may be useful to note that no E_WARNINGS or E_NOTICES are give if you specify a date <1901 or >2038 on systems where time_t is a 32bit signed integer.
If a date is specified outside of the allowed range you may get some unexpected results as no timestamp will be returned.
08-Apr-2007 02:29
Simple date compare:
mktime(0, 0, 0) >= mktime(0, 0, 0, $_POST['MonthVld'], $_POST['DayVld'], $_POST['YrVld'])
mktime(0, 0, 0) creates a unix time of the current date.
mktime(0, 0, 0, $_POST['MonthVld'], $_POST['DayVld'], $_POST['YrVld']) creates a unix time of the date that your user enters.
31-Mar-2007 09:46
You cannot simply subtract or add month VARs using mktime to obtain previous or next months as suggested in previous user comments (at least not with a DD > 28 anyway).
If the date is 03-31-2007, the following yeilds March as a previous month. Not what you wanted.
<?php
$dateMinusOneMonth = mktime(0, 0, 0, (3-1), 31, 2007 );
$lastmonth = date("n | F", $dateMinusOneMonth);
echo $lastmonth; //---> 3 | March
?>
mktime correctly gives you back the 3rd of March if you subtract 1 month from March 31 (there are only 28 days in Feb 07).
If you are just looking to do month and year arithmetic using mktime, you can use general days like 1 or 28 to do stuff like this:
<?php
$d_daysinmonth = date('t', mktime(0,0,0,$myMonth,1,$myYear)); // how many days in month
$d_year = date('Y', mktime(0,0,0,$myMonth,1,$myYear)); // year
$d_isleapyear = date('L', mktime(0,0,0,$myMonth,1,$myYear)); // is YYYY a leapyear?
$d_firstdow = date('w', mktime(0,0,0,$myMonth,'1',$myYear)); // FIRST falls on what day of week (0-6)
$d_firstname = date('l', mktime(0,0,0,$myMonth,'1',$myYear)); // FIRST falls on what day of week Full Name
$d_month = date('n', mktime(0,0,0,$myMonth,28,$myYear)); // month of year (1-12)
$d_monthname = date('F', mktime(0,0,0,$myMonth,28,$myYear)); // Month Long name (July)
$d_month_previous = date('n', mktime(0,0,0,($myMonth-1),28,$myYear)); // PREVIOUS month of year (1-12)
$d_monthname_previous = date('F', mktime(0,0,0,($myMonth-1),28,$myYear)); // PREVIOUS Month Long name (July)
$d_month_next = date('n', mktime(0,0,0,($myMonth+1),28,$myYear)); // NEXT month of year (1-12)
$d_monthname_next = date('F', mktime(0,0,0,($myMonth+1),28,$myYear)); // NEXT Month Long name (July)
$d_year_previous = date('Y', mktime(0,0,0,$myMonth,28,($myYear-1))); // PREVIOUS year
$d_year_next = date('Y', mktime(0,0,0,$myMonth,28,($myYear+1))); // NEXT year
$d_weeksleft = (52 - $d_weekofyear); // how many weeks left in year
$d_daysinyear = $d_isleapyear ? 366 : 365; // set correct days in year for leap years
$d_daysleft = ($d_daysinyear - $d_dayofyear); // how many days left in year
?>
11-Mar-2007 01:31
This function returns no negative results inside of XEN guests.
08-Jan-2007 02:43
There are several warnings here about using mktime() to determine a date difference because of daylight savings time. However, nobody seems to have mentioned the other obvious problem, which is leap years.
Leap years mean that any effort to use mktime() and time() to determine the age (positive or negative) of some timestamp in years will be flawed. There are some years that are 366 days long, therefore you cannot say that there is a set number of seconds per year.
Timestamps are good for determining *real* time, which is not the same thing as *human calendar* time. The Gregorian calendar is only an approximation of real time, which is tweaked with daylight savings time and leap years to make it conform more to humans' expectations of how time should or ought to work. Timestamps are not tweaked and therefore are the only authoritative way of recording in computers a proper order of succession of events, but they cannot be integrated with a Gregorian system unless you take both leap years and DST into account. Otherwise, you may get the wrong number of years when you are approaching a value of exactly X years.
As for PHP, you could still use timestamps as a way of determining age if you took into account not only DST but also whether or not each year is a leap year and adjusted your calculations accordingly. However, this could become messy and inefficient.
There is an alternative approach to calculating days given the day, month and year of the dates to be compared. Compare the years first, and then compare the month and day - if the month and day have already passed (or, if you like, if they match the current month and day), then add 1 to the total for the years.
This solution works because it stays within the Gregorian system and doesn't venture into the world of timestamps.
Here is a good discussion of this issue:
http://forums.devshed.com/php-development-5/
need-to-get-the-age-between-dob-
and-today-29925.html?&highlight=age+leap
[the above link was too long; combine the three lines to get the URL]
There is also the issue of leap seconds, but this will only arise if you literally need to get the *exact* age in seconds. In that case, of course, you would also need to verify that your timestamps are exactly correct and are not delayed by script processing time, plus you would need to determine whether your system conforms to UTC, etc. I expect this will hardly be an issue for anybody using PHP, however if you are interested there is an article on this issue on Wikipedia:
http://en.wikipedia.org/wiki/Leap_second
07-Nov-2006 04:42
There are several notes for mktime which use the number 86400 to differentiate two days. However this technique may pose a problem in case there is a day where the hour change between the two dates to compare.
Consequently, if you want the timestamp difference between the day where the hour change and the next day, it will not be equals to 86400 but either 82800 in case its the winter change of hour day or 90000 for the summer change of hour day.
For example in 2006 :
<?php
echo mktime(0,0,0,10,29,2006) - mktime(0,0,0,10,30,2006); // -90 000
?>
31-Oct-2006 01:28
As I see it, this function should default to zero for the first 3 arguments but one for the next two.
It makes sense to talk about the 0th hour of the day (midnight) or the 0th minute of the hour or the 0th second of the minute, but it makes no sense to talk about the 0th day of the month or the 0th month of the year.
The example of why this change should happen is below:
<select id="month" name="month">
<?php
for ($i = 1; $i <= 12; $i++)
echo '<option value="'.$i.'">'.date('F',mktime(0,0,0,$i)).'</option>';
?>
</select>
Produces a list of meaningless months. To make it useful, you have to add an extra argument to mktime.
<?php
mktime(0,0,0,$i,1)
?>
24-Aug-2006 10:07
In response to the post by "nicky" on July 9, 2006:
Just so everyone's clear, if you have a date string formatted in a standard way, you'll probably want to go ahead and use PHP's built-in strtotime() function. The advantage to using nicky's str2time() function seems to be that you can specify how the date string you're passing in is formatted, so you can deal with non-standard date strings.
09-Jul-2006 04:08
here's a function to generate a timestamp from a certain date by using patterns:
<?php
function str2time($strStr, $strPattern = null)
{
// an array of the valide date characters, see: http://php.net/date#AEN21898
$arrCharacters = array(
'd', // day
'm', // month
'y', // year, 2 digits
'Y', // year, 4 digits
'H', // hours
'i', // minutes
's' // seconds
);
// transform the characters array to a string
$strCharacters = implode('', $arrCharacters);
// splits up the pattern by the date characters to get an array of the delimiters between the date characters
$arrDelimiters = preg_split('~['.$strCharacters.']~', $strPattern);
// transform the delimiters array to a string
$strDelimiters = quotemeta(implode('', array_unique($arrDelimiters)));
// splits up the date by the delimiters to get an array of the declaration
$arrStr = preg_split('~['.$strDelimiters.']~', $strStr);
// splits up the pattern by the delimiters to get an array of the used characters
$arrPattern = preg_split('~['.$strDelimiters.']~', $strPattern);
// if the numbers of the two array are not the same, return false, because the cannot belong together
if (count($arrStr) !== count($arrPattern)) {
return false;
}
// creates a new array which has the keys from the $arrPattern array and the values from the $arrStr array
$arrTime = array();
for ($i = 0;$i < count($arrStr);$i++) {
$arrTime[$arrPattern[$i]] = $arrStr[$i];
}
// gernerates a 4 digit year declaration of a 2 digit one by using the current year
if (isset($arrTime['y']) && !isset($arrTime['Y'])) {
$arrTime['Y'] = substr(date('Y'), 0, 2) . $arrTime['y'];
}
// if a declaration is empty, it will be filled with the current date declaration
foreach ($arrCharacters as $strCharacter) {
if (empty($arrTime[$strCharacter])) {
$arrTime[$strCharacter] = date($strCharacter);
}
}
// checks if the date is a valide date
if (!checkdate($arrTime['m'], $arrTime['d'], $arrTime['Y'])) {
return false;
}
// generates the timestamp
$intTime = mktime($arrTime['H'], $arrTime['i'], $arrTime['s'], $arrTime['m'], $arrTime['d'], $arrTime['Y']);
// returns the timestamp
return $intTime;
}
// example
$time = str2time('06-07-08 07:58:02', 'd-m-y H:i:s');
var_dump($time);
var_dump(date('d.m.Y H:i:s', $time));
?>
08-May-2006 04:40
Negative timestamps give problem also using linux as guest operating system inside WMvare with Windows host operating system.
30-Mar-2005 10:48
If the month is greater than 12, it goes into the next year. If it is less than 1, it goes into the previous year. Generally, it behaves as you'd expect it to :-)
Examples:
<?php
// January 1, 2005
print date ("F j, Y", mktime (0,0,0,13,1,2004));
// December 1, 2003
print date ("F j, Y", mktime (0,0,0,0,1,2004));
// February 1, 2005
print date ("F j, Y", mktime (0,0,0,14,1,2004));
// November 1, 2003
print date ("F j, Y", mktime (0,0,0,-1,1,2004));
?>
01-Dec-2004 02:19
<?php
// Calculates UNIX timestamps from datestamps counting
// days from 01/01/0000. Us