2011-05-03 39 views
6

strtotime()如果你能提供一个它能够理解并可以转换的日期格式,那么在PHP中效果很好,但是例如你给它一个英国日期,它就不能给出正确的unix时间戳。接受格式的PHP strtotime()函数?

是否有任何PHP函数,官方或非官方的,可以接受格式变量,告诉日期和时间通过哪种格式的函数?

我来这样做的最接近的是date_parse_from_format()和您正在寻找strptime混合mktime()

// Example usage of the function I'm after 
//Like the date() function but in reverse 
$timestamp = strtotimeformat("03/05/2011 16:33:00", "d/m/Y H:i:s"); 

回答

21

如果你有PHP 5.3:

$date = DateTime::createFromFormat('d/m/Y H:i:s', '03/05/2011 16:33:00'); 
echo $date->getTimestamp(); 
+0

我正在寻找返回一个unix时间戳而不是另一种字符串格式的日期。 – Brady 2011-05-03 15:45:59

+0

'getTimestamp'返回一个unix时间戳... – meze 2011-05-03 15:48:34

+1

但是' - > getTimestamp()'确实返回一个unix时间戳... – Andrew 2011-05-03 15:50:10

2

,我想。如果需要UNIX时间戳,可以使用它来解析日期,然后使用mktime

function strotimeformat($date, $format) { 
    $d = strptime($date, $format); 
    return mktime($d['tm_hour'], $d['tm_min'], $d['tm_sec'], 
       $d['tm_mon'], $d['tm_mday'], $d['tm_year']); 
} 

这将适用于PHP 5.1及更高版本。

+0

不,我正在寻找的东西,返回一个unix时间戳的值的数组。 Plus strptime没有在Windows上实现,因此不是理想的解决方案。 – Brady 2011-05-03 15:39:56

+0

好的。我用一个函数更新了我的答案,无论如何给你一个时间戳(尽管如此,仍然不能在Windows上工作)。你当然可以做一些子字符串+ strpos工作(或爆炸+重新排列+ implode)使其成为美国的日期。 – 2011-05-03 15:46:37

+0

正如在我的问题中提到的,我已经使用'date_parse_from_format()'和'mktime()'的组合方式来显示你的代码。 ''date_parse_from_format()'适用于所有系统,但只适用于PHP 5.3> =以前版本可以在早期版本上运行,但不适用于Windows。我会将问题留待几天,以查看是否有其他答案。 – Brady 2011-05-03 15:52:20

0

strtotime假定它使用/作为分隔符时,是一个美国的日期/时间。要让它认为它是欧元日期/时间,请使用-.作为日期分隔符。您可以更改/ s到- s或. s用一个简单的str_replace()

+0

阅读这个问题......我很清楚strtotime的能力以及如何解决问题。但这不是我要求的...我要求一个函数,它接受任何格式的日期以及一个字符串,该字符串说明该日期的格式是什么,并返回一个unix时间戳。 – Brady 2011-05-03 15:44:54