For Windows user! It's rather the same as strptime!
It uses the previous function: but call strToTime($date, $format) to strToDate($date, $format) because this name is forgiven!
<?php
function strToDateTime($date, $format) {
if(!($date = strToDate($date, $format))) return;
$dateTime = array('sec' => 0, 'min' => 0, 'hour' => 0, 'day' => 0, 'mon' => 0, 'year' => 0, 'timestamp' => 0);
foreach($date as $key => $val) {
switch($key) {
case 'd':
case 'j': $dateTime['day'] = intval($val); break;
case 'D': $dateTime['day'] = intval(date('j', $val)); break;
case 'm':
case 'n': $dateTime['mon'] = intval($val); break;
case 'M': $dateTime['mon'] = intval(date('n', $val)); break;
case 'Y': $dateTime['year'] = intval($val); break;
case 'y': $dateTime['year'] = intval($val)+2000; break;
case 'G':
case 'g':
case 'H':
case 'h': $dateTime['hour'] = intval($val); break;
case 'i': $dateTime['min'] = intval($val); break;
case 's': $dateTime['sec'] = intval($val); break;
}
}
$dateTime['timestamp'] = mktime($dateTime['hour'], $dateTime['min'], $dateTime['sec'], $dateTime['mon'], $dateTime['day'], $dateTime['year']);
return $dateTime;
}
?>
Description
array strptime
( string $date
, string $format
)
strptime() returns an array with the date parsed, or FALSE on error.
Month and weekday names and other language dependent strings respect the current locale set with setlocale() (LC_TIME).
Parameters
- date (string)
-
The string to parse (e.g. returned from strftime())
- format (string)
-
The format used in date (e.g. the same as used in strftime()).
For more information about the format options, read the strftime() page.
Return Values
Returns an array, or FALSE on failure.
| parameters | Description |
|---|---|
| tm_sec | Seconds after the minute (0-61) |
| tm_min | Minutes after the hour (0-59) |
| tm_hour | Hour since midnight (0-23) |
| tm_mday | Day of the month (1-31) |
| tm_mon | Months since January (0-11) |
| tm_year | Years since 1900 |
| tm_wday | Days since Sunday (0-6) |
| tm_yday | Days since January 1 (0-365) |
| unparsed | the date part which was not recognized using the specified format |
Examples
Example #1 strptime() example
<?php
$format = '%d/%m/%Y %H:%M:%S';
$strf = strftime($format);
echo "$strf\n";
print_r(strptime($strf, $format));
?>
The above example will output something similar to:
03/10/2004 15:54:19 Array ( [tm_sec] => 19 [tm_min] => 54 [tm_hour] => 15 [tm_mday] => 3 [tm_mon] => 9 [tm_year] => 104 [tm_wday] => 0 [tm_yday] => 276 [unparsed] => )
Notes
Note: This function is not implemented on Windows platforms.
strptime
firefox3107 at gmail dot com
23-Mar-2008 08:44
23-Mar-2008 08:44
firefox3107 at gmail dot com
06-Mar-2008 12:01
06-Mar-2008 12:01
It's not the same as strptime. The array keys are different, for example '%d' will produce 'd' => '12'!!!
But it also returns false on failure.
<?php
function strToTime($date, $format) {
$search = array('%d', '%D', '%j', // day
'%m', '%M', '%n', // month
'%Y', '%y', // year
'%G', '%g', '%H', '%h', // hour
'%i', '%s');
$replace = array('(\d{2})', '(\w{3})', '(\d{1,2})', //day
'(\d{2})', '(\w{3})', '(\d{1,2})', // month
'(\d{4})', '(\d{2})', // year
'(\d{1,2})', '(\d{1,2})', '\d{2}', '\d{2}', // hour
'(\d{2})', '(\d{2})');
$pattern = str_replace($search, $replace, $format);
if(!preg_match("#$pattern#", $date, $matches)) {
return false;
}
$dp = $matches;
if(!preg_match_all('#%(\w)#', $format, $matches)) {
return false;
}
$id = $matches['1'];
if(count($dp) != count($id)+1) {
return false;
}
$ret = array();
for($i=0, $j=count($id); $i<$j; $i++) {
$ret[$id[$i]] = $dp[$i+1];
}
return $ret;
}
?>
ubik.dr at gmail.com
01-Mar-2008 10:27
01-Mar-2008 10:27
fields of the returned struct referring to unspecified parts of the message are filled strangely:
print_r(strptime('19841203', '%Y%m%d'));
Array
(
[tm_sec] => 142611740
[tm_min] => 12
[tm_hour] => -1074490616
[tm_mday] => 3
[tm_mon] => 11
[tm_year] => 84
[tm_wday] => 1
[tm_yday] => 337
[unparsed] =>
)
P.
30-Jan-2008 05:19
30-Jan-2008 05:19
If strptime() fails to match all of the format string and therefore an error occurred the function returns NULL.
chad 0x40 herballure 0x2e com
15-Jun-2007 08:00
15-Jun-2007 08:00
The result of strptime() is not affected by the current timezone setting, even though strftime() is. Tested in PHP 5.1.6.
svenr at selfhtml dot org
23-Nov-2006 02:44
23-Nov-2006 02:44
If you need strptime but are restricted to a php version which does not support it (windows or before PHP 5), note that MySQL since Version 4.1.1 offers (almost?) the same functionality with the STR_TO_DATE function.
See http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html
DT <pwadas at gazeta dot pl>
10-Aug-2006 01:55
10-Aug-2006 01:55
//This turns non-standard but often used "datetime" string
//like '20060810084251' into nice formatted date
//'Thursday, 10 August 2006 08:42:51 CEST'
//note, that strptime returns day of year counting from 0, so
//you need to put 1 as month number to get appropriate
//month for the daycount. for 2006 strptime for unknown
//reason returns 106, so I simply add 1900
$informat = '%Y%m%d%H%M%S';
$outformat = '%A, %d %B %Y %T %Z';
$ftime = strptime("20060810084251",$informat);
$unxTimestamp = mktime(
$ftime['tm_hour'],
$ftime['tm_min'],
$ftime['tm_sec'],
1 ,
$ftime['tm_yday'] + 1,
$ftime['tm_year'] + 1900
);
//setlocale(LC_TIME,'pl_PL');
echo strftime($outformat , $unxTimestamp );
jojyjob at gmail dot com
13-May-2006 01:18
13-May-2006 01:18
/***Finding the days of a week ***/
<?php
$out = pre();
$outpre=nextweek();
$td=date("Y-m-d");
$result = array_reverse($outpre);
//print_r($result);
array_push($result,$td);
$newarray = array_merge($result,$out);
foreach($newarray as $date1){
echo $date1;
echo "<br>";
}
//print_r($out);
//print_r($newarray);
function pre()
{
$monP=0;
$tueP=1;
$wedP=2;
$thuP=3;
$friP=4;
$satP=5;
$sunP=6;
$td=date("Y-m-d");
//echo $td;
$tdname=date("l");
switch($tdname)
{
case "Monday":
$rep=$monP;
break;
case "Tuesday":
$rep=$tueP;
break;
case "Wednesday":
$rep=$wedP;
break;
case "Thursday":
$rep=$thuP;
break;
case "Friday":
$rep=$friP;
break;
case "Saturday":
$rep=$satP;
break;
case "Sunday":
$rep=$sunP;
break;
default:
echo "Sorry";
}
//echo $tdname."<br>";
//echo $rep;
$datstart =$td; /* the starting date */
//$rep = 12; /* number of future dates to display */
$nod = 1; /* number of days in the future to increment the date */
$nom = 0; /* number of months in the future to increment the date */
$noy = 0; /* number of years in the future to increment the date */
$precon=future_date($datstart,$rep,$nod,$nom,$noy);
return $precon;
}
function future_date($datstart,$rep,$nod,$nom,$noy) {
$pre = array();
while ($rep >= 1) {
$datyy=substr($datstart,0,4);
$datmm=substr($datstart,5,2);
$datdd=substr($datstart,8,2);
$fda=$datdd - $nod;
$fmo=$datmm - $nom;
$fyr=$datyy -$noy;
$dat1=date("Y-m-d", mktime(0,0,0,$fmo,$fda,$fyr))."<BR>";
array_push($pre,$dat1);
//echo $dat1;
$datstart=$dat1;
$rep--;
}
return $pre;
}
function nextweek()
{
$monN=6;
$tueN=5;
$wedN=4;
$thuN=3;
$friN=2;
$satN=1;
$sunN=0;
$td=date("Y-m-d");
$tdname=date("l");
switch($tdname)
{
case "Monday":
$rep=$monN;
break;
case "Tuesday":
$rep=$tueN;
break;
case "Wednesday":
$rep=$wedN;
break;
case "Thursday":
$rep=$thuN;
break;
case "Friday":
$rep=$friN;
break;
case "Saturday":
$rep=$satN;
break;
case "Sunday":
$rep=$sunN;
break;
default:
echo "Sorry";
}
//echo $tdname."<br>";
//echo $rep;
$datstart =$td; /* the starting date */
//$rep = 12; /* number of future dates to display */
$nod = 1; /* number of days in the future to increment the date */
$nom = 0; /* number of months in the future to increment the date */
$noy = 0; /* number of years in the future to increment the date */
$con = future_date1($datstart,$rep,$nod,$nom,$noy);
return $con;
}
function future_date1($datstart,$rep,$nod,$nom,$noy) {
$pre = array();
while ($rep >= 1) {
$datyy=substr($datstart,0,4);
$datmm=substr($datstart,5,2);
$datdd=substr($datstart,8,2);
$fda=$datdd + $nod;
$fmo=$datmm + $nom;
$fyr=$datyy + $noy;
$dat1=date("Y-m-d", mktime(0,0,0,$fmo,$fda,$fyr))."<BR>";
array_push($pre,$dat1);
//echo $dat1;
$datstart=$dat1;
$rep--;
}
return $pre;
}
?>
Malte Starostik
27-Mar-2006 11:45
27-Mar-2006 11:45
It says "Parse a time/date generated with strftime()" but that's not entirely correct -- While strptime("2006131", "%Y%W%u") works as expected, strptime("2006131", "%G%V%u") returns false instead of reversing the equivalent - and unambiguous - strftime() usage. I suspect that's because glibc doesn't support that. Anyway, this docu page fails to mention that apparently not all format components supported by strftime() can be used with strptime().
