将日,全月,年和国家转换为YYYY-MM-DD

时间:2011-10-09 17:03:26

标签: php date

我正在尝试将字符串18 December 2009 (Sweden)转换为2009-12-18,但我无法弄清楚如何。所以我现在问你:我怎么能这样做?

提前致谢。

4 个答案:

答案 0 :(得分:1)

您可以使用strtotime():

<?php
$sdate = '18 December 2009';
$timestamp = strtotime($sdate);
$d = date('Y-m-d', $timestamp);
echo "$d\n"; // 2009-12-18

如果您的问题是“(瑞典)”部分始终存在,您可以先删除该部分:

<?php
$sdate = '18 December 2009 (Sweden)';
$sdate = preg_replace('/ \(.*\)$/', '', $sdate);
$timestamp = strtotime($sdate);
$d = date('Y-m-d', $timestamp);
echo "$d\n"; // 2009-12-18

或者添加了检查:

<?php
$sdate = $oImdb->getReleaseDate();
if ($sdate !== 'n/A') {
    $sdate = preg_replace('/ \(.*\)$/', '', $sdate);
    $timestamp = strtotime($sdate);
    $d = date('Y-m-d', $timestamp);
} else {
    $d = 'n/a';
}
echo "$d\n"; // 2009-12-18

或使用sscanf():

<?php
$sdate = '18 December 2009 (Sweden)';
list($day, $month, $year) = sscanf($sdate, '%d %s %d');
$timestamp = strtotime("$day $month $year");
$d = date('Y-m-d', $timestamp);
echo "$d\n"; // 2009-12-18

答案 1 :(得分:0)

首先使用Explode等删除国家名称,将日期和国家名称存储在单独的字符串中,然后使用strtotime

strtotime("18 December 2009")
strtotime(<String Variable containing date>)

它返回一个时间戳,然后您可以根据需要使用它。 See this for reference

然后使用Date以您想要的格式将时间戳转换为日期。

答案 2 :(得分:0)

还有PHP 5 DateTime对象,如果开始使用除日期之外的时间,它将允许您捕获时区并转换时区。

<?php
$sdate = '18 December 2009 (Sweden)';
$sdate = preg_replace('/ \(.*\)$/', '', $sdate);
$datetime = new DateTime($sdate, new DateTimeZone('UTC'));
echo $datetime->format('Y-m-d');  // 2009-12-18

DateTime对象允许您在没有任何秒算术的情况下操作日期,这可能是使用DateTime而不是strtotime()的原因。

例如,这会在原始日期添加一个月。 DateTime类的许多好处。

$datetime->add(new DateInterval('P1M'));

答案 3 :(得分:0)

我不确定你在那里做什么,但从您在评论中写到的错误消息来判断,我会说你正在从错误的一端接近问题。引用:

  

谢谢!当我使用$oIMDB->getReleaseDate()尝试该函数时,我收到以下错误消息:

     
    

致命错误:消息DateTime::__construct() [datetime .-- construct]的未捕获异常'异常':无法解析时间字符串(<time itemprop="datePublished" datetime="2009-12-18">18 December 2009</time>)...

  

换句话说,您的getReleaseDate返回一个XML字符串,该字符串具有属性datetime,其中包含您尝试将元素值转换为的值。所以,没有必要转换任何东西,因为转换后的值已经存在。您所要做的就是使用SimpleXmlDOM并访问该属性值,例如

$time = simplexml_load_string($oIMDB->getReleaseDate());
echo $time['datetime'];