CSV — о дате_формат в переполнении стека

Я использую PHP версии 5.5.15 и запускаю php (на моей локальной машине с Windows) с Xampp.

У меня проблемы с переменной $ time. $ date и $ date2 работают.

вот код:

<?php
//include_once('connect.php')
function currencyquote() {
$from = 'EUR';
$to = 'USD';
$url = 'http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s='.$from .$to .'=X';
$handle = @fopen($url,'r');
if($handle) {
$result = fgets($handle, 4096);
fclose($handle);

}
$allData = explode(',',$result);
$date = $allData[2];  //ex.: "2/18/2015"$time = $allData[3];  //ex.: "1:48pm"  -> New York local time
$close = $allData[1]; // ex.: 1.3151

echo 'the $result = ' . $result .'<br />';
echo 'the $time = ' .$time. '<br />';

$date2 = date_create_from_format("h:ia","01:50pm");
echo 'the $date2 = ' . date_format($date2, "H:i:s") . "<br />";

$date3 = "01:50pm";
$date=date_create_from_format("h:ia",$date3);
echo 'the $date = ' . date_format($date,"H:i:s") . "<br />";

// this is what i want to use :
$time1 = date_create_from_format("h:ia", $time);
echo 'the $time1 = ' . date_format($time1,"H:i:s") . "<br /><br />";   // this line is line 30 of the code

//with strtotime:
echo 'using \'date\' = ' . date("h:i:s", strtotime($allData[3])) . "<br />";
echo 'using \'date()\': '.date('H:i:s', strtotime($time));}
currencyquote();
?>

а вот и результаты работы php-жюри:

the $result = "EURUSD=X",1.1372,"2/19/2015","7:20am"the $time = "7:20am"the $date2 = 13:50:00
the $date = 13:50:00

Warning: date_format() expects parameter 1 to be DateTimeInterface,    boolean given in C:\xampp\htdocs\Nofrafin\php\downloader.php on line 30
the $time1 =

using 'date' = 01:00:00
using 'date()': 01:00:00

0

Решение

Скорее всего, сообщение, которое вы получите, означает, что $time1 установлен в false, И причина этого должна быть date_create_from_format() не может соответствовать формату даты h:is с переменной, которую вы предоставляете, $time,

Продвигаясь дальше, у вас есть

$time = $allData[3];  //ex.: "1:48pm"

Я пытался изменить на $time = '1:48pm'; и это сработало отлично. Так что это означает, что вы не получаете данные, которые вы думаете от CSV.

Я попытался загрузить тот же файл, что и вы, и получил это обратно:

"EURUSD=X",1.1371,"2/19/2015","7:50am"

И вот почему это не работает — $time установлен в "7:50am" с завершающим переводом строки, а не 7:50am, Удалить двойные кавычки (например, $time = trim(str_replace('"', '', $time)); и, надеюсь, все будет хорошо. 🙂

0

Другие решения

Во-первых:

Для чтения CSV используйте функцию fgetcsv (), поэтому вам не нужно будет фильтровать кавычки из выходных данных CSV, и нет необходимости выполнять explode ().

if($handle) {
$result = fgetcsv($handle, 4096);
fclose($handle);

}
$date = $result[2];  //ex.: "2/18/2015"$time = $result[3];  //ex.: "1:48pm"  -> New York local time
$close = $result[1]; // ex.: 1.3151

$time1 = date_create_from_format("G:ia", $time);

Во-вторых:

Вам следует тщательно отфильтровать входную строку для функции date_create_from_format.

такие как:

$time = trim(str_replace("\"","", $time)); // you will get something like 7:20am

а потом:

$time1 = date_create_from_format("G:ia", $time); // G - for 24-hour format without leading zeroes in your case

но все равно используйте первое решение (fgetcsv ())

0

По вопросам рекламы [email protected]