2010-11-25 121 views
22

我有一個格式爲'Y-m-d'的日期值數組。我想循環訪問數組,只提取每個成員的日期('d'),但不能分解它。我是否以某種方式使用子字符串?如何從完整的'Date'字符串中僅提取'Day'值?

簡而言之,我有'2010-11-24',我想從中得到'24'。現在的問題可能是單數或雙數。

回答

59

如果你有PHP < 5.3,使用strtotime()

$string = "2010-11-24"; 
$timestamp = strtotime($string); 
echo date("d", $timestamp); 

如果你有PHP> = 5.3,使用通過createFromFormat一個DateTime基礎的解決方案 - DateTime是未來,可以處理日期超出了1900年和2038:

$string = "2010-11-24"; 
$date = DateTime::createFromFormat("Y-m-d", $string); 
echo $date->format("d"); 
+1

+1的`DateTime`版本。從單獨的方法名稱很容易理解。 – jensgram 2010-11-25 09:53:09

5
$date = '2010-11-24'; 
list($y, $m, $d) = explode('-', $date); 

Demo,在explode()文檔。

甚至

$date = '2010-11-24'; 
$d = substr($date, strrpos($date, '-') + 1); 

Demo,在substr()strrpos()文檔。

聲明:兩者都是老式學校!

0
php> $d = '2010-11-24'; 
'2010-11-24' 
php> $fields = explode('-', $d); 
array (
    0 => '2010', 
    1 => '11', 
    2 => '24', 
) 
php> $fields[2]; 
'24' 
0
<?php 

$dates = array('2010-01-01', '2010-01-02', '2010-01-03', '2010-01-23'); 

foreach ($dates as $date) { 
    $day[] = substr($date, 8, 2); 
} 

var_dump($day); 

?> 
+0

不過,取決於月份是否可能只是`9`或將永遠是`09`。 – jensgram 2010-11-25 09:51:39

0
$string = "2010-11-24"; 
$date = new DateTime($string); 
echo date_format($date, 'd'); 
0

嘗試使用date_parse_from_format,例如:

date_parse_from_format('Y-m-d', '2010-11-24')['day']; 

測試殼:

$ php -r "echo date_parse_from_format('Y-m-d', '2010-11-24')['day'];" 
24