Конвертировать день, полный месяц, год и страну в ГГГГ-ММ-ДД - PullRequest
0 голосов
/ 09 октября 2011

Я пытаюсь преобразовать строку 18 December 2009 (Sweden) в 2009-12-18, но не могу понять, как. Итак, я спрашиваю вас сейчас: как я могу это сделать?

Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 09 октября 2011

Вы можете использовать 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
0 голосов
/ 10 октября 2011

Я не уверен, что вы там делаете, но, судя по сообщению об ошибке, которое вы написали в своем комментарии к JM выше, я бы сказал, что вы подходите к проблеме не с того конца.Цитата:

Спасибо!Когда я пытаюсь использовать функцию с $oIMDB->getReleaseDate(), я получаю следующие сообщения об ошибках:

Неустранимая ошибка: необработанное исключение 'Exception' с сообщением 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'];
0 голосов
/ 09 октября 2011

Существует также объект 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'));
0 голосов
/ 09 октября 2011

Сначала используйте Explode и т. Д., Чтобы удалить название страны, сохранить дату и название страны в отдельных строках, а затем использовать strtotime

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

Возвращает отметку времени, затем вы можете использовать ее по своему усмотрению. См. Это для справки

Затем используйте Дата , чтобы преобразовать отметку времени в дату в нужном формате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...