Php 将日、整月、年和国家/地区转换为YYYY-MM-DD

Php 将日、整月、年和国家/地区转换为YYYY-MM-DD,php,date,Php,Date,我正在尝试将字符串2009年12月18日(瑞典)转换为2009-12-18,但我不知道如何转换。所以我现在问你:我该怎么做 提前感谢。首先使用Explode等删除国家名称,将日期和国家名称存储在单独的字符串中,然后使用strotime strtotime("18 December 2009") strtotime(<String Variable containing date>) strottime(“2009年12月18日”) strotime() 它返回一个时间戳,然后您可

我正在尝试将字符串
2009年12月18日(瑞典)
转换为
2009-12-18
,但我不知道如何转换。所以我现在问你:我该怎么做


提前感谢。

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

strtotime("18 December 2009")
strtotime(<String Variable containing date>)
strottime(“2009年12月18日”)
strotime()
它返回一个时间戳,然后您可以根据需要使用它

然后使用将时间戳转换为所需格式的日期。

您可以使用strotime()


还有PHP5DateTime对象,它允许您捕获时区,并在开始使用日期以外的时间时转换时区

<?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

我不知道你在那里做什么,但是从你在上面给JM的评论中所写的错误信息来看,我认为你是从错误的角度来处理这个问题的。引述:


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

致命错误:未捕获异常“exception”,消息为
DateTime::\u construct()
[DateTime.-construct]:无法分析时间字符串(
2009年12月18日

换句话说,您的
getReleaseDate
返回一个XML字符串,该字符串具有一个属性
datetime
,该属性的值是您试图将元素值转换为的值。因此,不需要转换任何内容,因为转换后的值已经存在。您所要做的就是使用或访问该属性值,例如

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

整个月都是英语的吗,还是你希望2009年1月18日(瑞典)
?而且它总是会是瑞典吗?@NullUserException:
18 Januari 2009(瑞典)
在不同的标题之间混合使用。这些信息来自imdb.com。@ceejayoz:是的,我有。它只打印
1970-01-01
。谢谢<代码>$test=explode(“”,$oIMDB->getReleaseDate());echo$测试[2]打印
datetime=“2009-12-18”>18
。从
datetime=”“
获取日期的最聪明的方法是
preg\u match
。我只是
preg_match
的初学者,现在我想知道:如何仅获取
datetime=“”
中的日期?strotime以时间戳的形式返回日期,使用date从该时间戳获取字符串中的日期,或者使用getdate从时间戳获取数组中的日期!但是我对第二个和第三个解决方案有一些问题(由于字符串中的国家名称,我还没有尝试第一个解决方案)。第二个解决方案打印正确的日期,如果我的日期与您显示的完全相同。如果我用
$oIMDB->getReleaseDate()
替换
2009年12月18日(瑞典)
,它将打印
1970-01-01
。第三个解决方案使用$oIMDB->打印
2011-10-09
…我不知道
$oIMDB->getReleaseDate()
返回的确切内容,所以我刚刚从您的示例中学习。如果你能举例说明你要回去的日期,我们应该能想出一个更普遍的解决办法。可能某些日期在年份之后有不同的文本,因此正则表达式不匹配。我使用的类:。您可以在第807行的
imdb.class.php
文件中找到
$oIMDB->getReleaseDate()
。它失败是因为返回的日期为“n/A”(即未找到)?从
$oIMDB->getReleaseDate()
回显返回值可能很有用,这样我们就可以看到它试图匹配的内容。如果问题是那部电影没有发行日期,你可以放一个例外(见主要答案中编辑的例子)。嗯,好的。我试图删除
return$this->strNotFound从类文件,但它返回的“错误”一如既往-无。谢谢!当我使用
$oIMDB->getReleaseDate()
尝试函数时,我收到以下错误消息:
致命错误:未捕获异常“exception”,消息为“DateTime::u construct()[DateTime.-construct]:无法分析位置0处的时间字符串(2009年12月18日)(请确保输入DateTime构造函数的内容实际上是“2009年12月18日”。使用
echo$sdate;
进行测试以确保字符串正确。
$sdate
打印
2009年12月18日
。看起来您正在将整个xml字符串输入DateTime:\uu construct()的第一个参数。)
<?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
<?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
<?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->add(new DateInterval('P1M'));
$time = simplexml_load_string($oIMDB->getReleaseDate());
echo $time['datetime'];