2012-03-27 46 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