PHP日期格式转换

时间:2010-02-25 08:57:27

标签: php date

这就是我所拥有的:

$dateFormat = 'M d, Y';
$dateString = 'January 23, 2010';

我需要的是$dateString的时间戳,所以我可以这样做:

$newFormattedDate = date('Y-m-d', $timestamp);

我尝试使用strtotime函数,但它试图找出格式本身并且不能始终有效。在我的情况下,我知道日期字符串和日期格式。

如何将$timestamp设置为适当的值以用于date功能?

编辑:我需要在Linux和Windows环境中都能使用它。

编辑:解决方案必须支持PHP 4或更高版本

编辑:MySQL有一个名为STR_TO_DATE的函数,它接受日期字符串和日期格式并返回Y-m-d格式的日期字符串。 php的任何等效函数也适用于我。

4 个答案:

答案 0 :(得分:7)

从PHP5.3起,您可以使用DateTime API

$dt = date_create_from_format('M d, Y', 'January 23, 2010');
echo date_timestamp_get($dt);

或使用OOP表示法

$dt = DateTime::createFromFormat('M d, Y', 'January 23, 2010');
echo $dt->getTimestamp();

请注意,DateTime虽然可用于PHP< 5.3,上面使用的方法不是,虽然您可以使用->getTimestamp()模拟->format('U'),但createFromFormat()没有简单的解决方法

另一种方法是使用Zend Framework中的Zend_Date

$date = new Zend_Date('Feb 31, 2007', 'MM.dd.yyyy');
echo $date->get(Zend_Date::TIMESTAMP);

答案 1 :(得分:3)

使用strptimemktimestrftime

$ftime = strptime($dateString, $dateFormat);
$timestamp = mktime($ftime['tm_hour'], $ftime['tm_min'], $ftime['tm_sec'], 1,
                    $ftime['tm_yday'] + 1, $ftime['tm_year'] + 1900);

echo strftime('Y-m-d', $timestamp);

请注意,strptime未在Windows平台上实施。

请注意,mktime的参数有些不同寻常 - strptime会返回一年中的某一天(0-365之间),而不是一个月中的某一天,所以我们设置将mktime的月份参数设置为1,并将1添加到一年中的某一天。此外,strptime返回自1900年以来的年份返回的年份值,因此我们需要在将年份增加1900之前将其传递给mktime

此外,您可能需要在将$ftime传递给FALSE之前检查mktime是否为strptimeFALSE返回$dateString表示根据$dateFormat,输入{{1}}不是有效的日期格式。

答案 2 :(得分:2)

鉴于我对这个问题的理解以及PHP中的可用内容,您需要在某处或其他地方放松您的期望。

一个“简单”的解决方案(已经打折)将强制使用PHP 5.3及其中提供的工具。

一个不太简单的解决方案是将这些添加内容移植到PHP-land(兼容PHP 4,祝你好运)。

另一种探索途径是考虑strtotime不适合你并解决这些限制的场合。

您的格式字符串的变体有多广泛?有可能提出一种解决方案,将格式字符串映射到函数/方法(进行日期解析),前提是它们非常受限制。

答案 3 :(得分:0)

$dateFormat = 'M d, Y'
$timestamp = strtotime($dateString);
echo date($dateFormat, $timestamp); 

如果我没有误解你的问题,你可以尝试上面的代码..