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;
}
?>
Descrizione
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).
Elenco dei parametri
- 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.
Valori restituiti
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 |
Esempi
Example #1 strptime() example
<?php
$format = '%d/%m/%Y %H:%M:%S';
$strf = strftime($format);
echo "$strf\n";
print_r(strptime($strf, $format));
?>
Il precedente esempio visualizzerà qualcosa simile a:
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] => )
Note
Nota: Questa funzione non è implementata sulle piattaforme Windows.
strptime
firefox3107 at gmail dot com
23-Mar-2008 07:44
23-Mar-2008 07:44
P.
30-Jan-2008 04:19
30-Jan-2008 04: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 07:00
15-Jun-2007 07: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 01:44
23-Nov-2006 01: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 12:55
10-Aug-2006 12:55
<?php
//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 12:18
13-May-2006 12: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 10:45
27-Mar-2006 10: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().
