2012-12-12 28 views
1

我有一個Excel格式爲10/12/2012.然後我把它轉換成CSV文件我有一個日期爲「41253」,當我導入到我的數據庫它存儲爲0000-00-00。如何在導入時轉換日期格式。或者還有其他方法嗎?轉換日期,同時從Excel表導入數據到數據庫在php

這是代碼即時通訊使用導入到數據庫

if(isset($_POST['Submit'])) 
{ 

GLOBAL $HTTP_POST_FILES; 

//$path= $HTTP_POST_FILES['ufile']['name']; 
$path= $_FILES['ufile']['name']; 
// 
if(copy($_FILES['ufile']['tmp_name'], $path)) 
{ 

$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="xyz"; // Database name 
$tbl_name="productsegmentmaster"; // Table name 
require_once '.\phpExcelReader\Excel\reader.php'; 
$excel = new Spreadsheet_Excel_Reader(); 
$excel->setOutputEncoding('CP1251'); 
$excel->read($path); 
$x=2; 
$sep = "*"; 
ob_start(); 
while($x<=$excel->sheets[0]['numRows']) { 
$y=1; 
$row=""; 
while($y<=$excel->sheets[0]['numCols']) { 
$cell = isset($excel->sheets[0]['cells'][$x][$y]) ? $excel->sheets[0]['cells'][$x][$y] : ''; 
$row.=($row=="")?"".$cell."":"".$sep."".$cell.""; 
$y++; 
} 
echo $row."\n"; 
$x++; 
} 
    //echo "Sheet count:$x"; 
$fp = fopen("data.csv",'w'); 
fwrite($fp,ob_get_contents()); 
fclose($fp); 
//echo"----"; 
ob_end_clean(); 
//connect to the database 
$connect = mysql_connect("localhost","root",""); 
mysql_select_db("AmaraRaja",$connect); //select the table 
//$file = $_FILES['data.csv']['tmp_name']; 
$handle = fopen('data.csv',"r"); 
//loop through the csv file and insert into database 
global $data; 
do { 
//echo "$data[0]"; 
//echo "$data[1]"; 
//echo "$data[2]"; 
     //$post['ProductSegmentCode'] = $data[0]; 
//  $post['ProductSegment'] = $data[1]; 
//   $post['ProductGroup'] = $data[2]; 
     $post['ProductCode'] = $data[0]; 
     $post['WarrantyPeriod'] = $data[1]; 
     $post['ProRataPeriod'] = $data[2]; 
     $test = date("Y-m-d",strtotime($data[3])); 
     $post['ManufactureDate'] = $test; 
     $test1 = date("Y-m-d",strtotime($data[4])); 
     echo $data[4]; 
     $post['ApplicableFormDate'] = $test1; 
     $tname = "productwarranty"; 
try 
{ 
if($data[0]!="") 
{ 
    $news->addNews($post,$tname); 
//mysql_query("INSERT INTO productsegmentmaster VALUES ('$data[0]', '$data[1]','$data[2]')"); 

    } 
} 
catch(Exception $e) 
{ 
    echo $e.getMessage(); 
} 
} while ($data = fgetcsv($handle,1000,"*","'")); 
echo"<script>alert('File $path Imported Successfully')</script>"; 
} 
fclose($handle); 

unlink('data.csv'); 
unlink($path); 
} 

?> 
+0

格式Excel中的日期字段轉換爲CSV之前文本。 –

+0

我已經有很多條目在該日期字段中,如果我將其更改爲所有日期都更改爲數值... –

+0

= TEXT(A1,「yyyy-mm-dd」)<<在所有日期上運行該公式保存爲CSV之前將其轉換爲新字段,然後將其轉換爲正確格式的文本。 –

回答

1

可悲的是,我有完全相同的問題!我嘗試了格式化方式,沒有工作!

我不知道它是否適用於您,但我帶來的解決方案是在它的前面加上了一個撇號! ('YYYY/MM/DD)。 Excel本身省略了撇號,只顯示數據AS TEXT,而不是Excel時間戳。這樣你就可以用「/」分解數據並按照你想要的方式進行分解。

但是,如果你不可能在你的每一個前面放一個撇號,你可以驗證是否是一個數字並且試着登錄convert the excel timestamp to unix timestamp,假設你的服務器是一個* NIX的。

=)

我知道這是不是最好的解決辦法,但到目前爲止是我能得到什麼。希望它可以幫助你。

0

嘗試這個

$date_format = floor($excelDateTime); 
    $time_format = $excelDateTime - $date_format; 
    $mysql_strdate = ($date_format > 0) ? ($date_format - 25569) * 86400 + $time_format * 86400 : $time_format * 86400; 
    $mysql_date_format = date("Y-d-m", $mysql_strdate);