2012-03-27 84 views
-1

我正在尋找一個做date()的逆函數。含義:php日期字符串到時間戳 - inverse_date()

$timestamp = inverse_date($format_string, $date_string); 
$d = date($format_string, $timestamp); 
if ($d === $date_string) { 
    echo 'This is what I want'; 
} 

問題我碰到迄今爲止:

strtotime - 將猜測的格式,所以它可能不適合所有格式

strptime - 使用的strftime的格式是不同日期的

SOLUTION:

function inverse_date($format_string, $date_string) { 
    $dateTime = date_create_from_format($format_string, $date_string); 
    $value_ts = date_format($dateTime, 'U'); 
    return $value_ts; 
} 

感謝Till Helge Helwig提供的鏈接。

+2

也許[此帖](http://stackoverflow.com/a/2767419/989169)包含一些對你有幫助? – 2012-03-27 16:19:11

+0

你想要的輸入和輸出是什麼?我不明白你的問題 – JKirchartz 2012-03-27 16:20:20

+0

爲什麼strtotime不行?您可以將任何英文格式的日期轉換爲時間戳,然後時間戳便於格式化。你可以先證明日期。 – 2012-03-27 16:22:39

回答

0
function inverse_date($format_string, $date_string) { 
    $dateTime = date_create_from_format($format_string, $date_string); 
    $value_ts = date_format($dateTime, 'U'); 
    return $value_ts; 
} 
-1

在PHP5.3以下,您最好的選擇是strtotime()。據猜測倍很好

使用mktime()Doc here 如果你有個約會,並知道它是如何被格式化,只是explode()玩,你必須預先設定您所期望的格式:

例子:

define('DMY4', 'dd-mm-yyyy'); 
// Other similar defines with all formats expected 

function inverse_date($format_string, $date_string) { 
    $d = 0; 
    $m = 0; 
    $y = 0; 
    $h = 0; 
    $i = 0; 
    $s = 0; 
    switch ($format_string) { 
      case DMY4: 
       list($d, $m, $y) = explode('-', $date_string); 
       break; 
      // etc... 
    } 
    $time = mktime($h, $m, $s, $m, $d, $y); 
} 
+0

-1:我需要它使用適用於date() – Gavriel 2012-03-27 16:31:55

+0

的任何有效格式字符串。然後,您需要創建一個函數,該函數使用pcre正則表達式或多個字符串函數來確定格式,然後相應地處理日期。控制日期輸入並使用strtotime更容易。 – 2012-03-28 08:28:27