关于php中的日期\格式

关于php中的日期\格式,php,csv,date-format,Php,Csv,Date Format,我使用的是PHP5.5.15版本,并使用Xampp运行PHP(在我本地的windows机器上) 我对变量$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=s

我使用的是PHP5.5.15版本,并使用Xampp运行PHP(在我本地的windows机器上)

我对变量$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();
?>

您收到的消息很可能意味着
$time1
设置为
false
。原因应该是
date\u create\u from\u 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));
你应该很好。:)

首先:

对于CSV读取,请使用fgetcsv()函数,这样您就不必从CSV输出中过滤引号,也无需执行explode()

第二:

您应该仔细地过滤date\u create\u from\u 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()

$time1 = date_create_from_format("G:ia", $time);
$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