我正在尝试将字符串18 December 2009 (Sweden)
转换为2009-12-18
,但我无法弄清楚如何。所以我现在问你:我怎么能这样做?
提前致谢。
答案 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
,其中包含您尝试将元素值转换为的值。所以,没有必要转换任何东西,因为转换后的值已经存在。您所要做的就是使用SimpleXml或DOM并访问该属性值,例如
$time = simplexml_load_string($oIMDB->getReleaseDate());
echo $time['datetime'];