2013-08-01 33 views
0

這是我的情況。 我正在通過php文件發送記錄到數據庫。然後我用now()設置日期字段。它以這種格式添加日期:2013-08-01從MYSQL日期中取出破折號

然後我將數據庫導出到csv。它一切正常。但是,當我將它導出到csv時,我需要拿出破折號。所以我需要它閱讀:20130801

有沒有辦法做到這一點?這裏是我輸出爲csv代碼:

$from = $_REQUEST['from']; 
$to = $_REQUEST['to']; 
$filename = "APGE_ELEC_" . $to; 
header('Content-Disposition: attachment; filename="'.$filename.'".csv"'); 

    $hostname = ""; //SET SERVER/HOSTNAME 
    $dbusername = ""; //SET DATABASE USERNAME 
    $dbname = ""; //SET DATABASE NAME 
    $dbpassword = ""; //SET DATABASE USERNAME 

$dbhandle = mysql_connect($hostname, $dbusername, $dbpassword) 
    or die("Unable to connect to MySQL"); 

$selected = mysql_select_db($dbname,$dbhandle) 
    or die("Could not select Data Base"); 

//$query = "SELECT * FROM v88374 WHERE ((date >= '$from') AND (date <= '$to'))"; 
$query = "SELECT * FROM v88374 WHERE date >= DATE_FORMAT('" . $from . "', '%Y%m%d') AND date <= DATE_FORMAT('" . $to . "', '%Y%m%d')"; 
//$query = "SELECT * FROM v88374 WHERE date >= DATE_FORMAT($from) AND date <= DATE_FORMAT($to)"; 

$export = mysql_query ($query) or die ("Sql error : " . mysql_error()); 

$fields = mysql_num_fields ($export); 

for ($i = 0; $i < $fields; $i++) 
{ 
    $header .= mysql_field_name($export , $i) ."|" . "\t"; 
} 

while($row = mysql_fetch_row($export)) 
{ 
    $line = ''; 
    foreach($row as $value) 
    {            
     if ((!isset($value)) || ($value == "")) 
     { 
      $value = "\t"; 
     } 
     else 
     { 
      $value = str_replace('"' , '""' , $value); 
      $value = $value . '|' . "\t"; 
     } 
     $line .= $value; 
    } 
    $data .= trim($line) . "\n"; 
} 
$data = str_replace("\r" , "" , $data); 

if ($data == "") 
{ 
    $data = "\n(0) Records Found!\n"; 

} 

print "$header\n$data"; 


exit(); 

$ to和$ from是用於在數據庫中搜索日期範圍的參數。所以我們可以獨自離開。

+1

你在哪裏陷入特定? – PeeHaa

回答

5

您需要選擇格式化的時間

$query = "SELECT *, DATE_FORMAT(date,"%Y%m%d") FROM v88374 WHERE date >= DATE_FORMAT('" . $from . "', '%Y%m%d') AND date <= DATE_FORMAT('" . $to . "', '%Y%m%d')"; 
+0

這工作完美。唯一的是,它在其中添加了一個帶有%Y%m%d的額外字段名稱。有沒有辦法像字段名一樣保留'日期'? – dkeeper09

+1

是的,使用SELECT ... DATE_FORMAT(date,「%Y%m%d」)AS formatingdate ...我不會使用日期,因爲改寫現有字段名稱是不好的做法。 – ProfMax

0

您可以像使用引號一樣使用str_replace(),但將其修改爲破折號,將其替換爲空字符串。

$value = str_replace('-' , '' , $value); 

雖然這會帶來一些危險。如果您有其他使用破折號的數據類型呢?他們會被損壞。另一種選擇是在刪除短劃線之前,使用explode()checkdate()以確保它是date。例如:

$dt = explode("-", $value); // Yields array([0] => 2013, [1] => 08, [2] => 01) 
// checkdate(int month, int day, int year) 
if (checkdate($dt[1], $dt[2], $dt[0])) { 
    // It's a date. 
    $value = str_replace('-','',$value); 
} 
0
$date="2013-08-01"; 

$converted_date=date("Ymd", strtotime($date)); 
+0

如果你想要做的只是去掉斜線,那會很痛苦。一個簡單的'str_replace()'將比通過日期解析系統的往返更快。 –

+1

@MarcB:我接受,但是這種方法可能會在將來需要時轉換格式:)來幫助他/她 –

1
SELECT DATE_FORMAT(datefield, '%Y%m%d') 

,如果你想直接在數據庫中做到這一點。

0

我傾向於更喜歡更多的面向對象方法。這樣,如果您需要更改格式,您可以輕鬆修改它。

$date = new DateTime($date_from_mysql);  
echo $date->format('Ymd'); // Or adjust the format how you like 

當然,您不應該使用已棄用的ext/mysql擴展名用於新項目。