1

2012年10月12日の形式のExcelシートを持っています。次に、それをcsvファイルに変換します。日付は「41253」です。これをデータベースにインポートすると、0000-00-00として保存されます。インポート中に日付形式を変換する方法。または他の方法はありますか?

これは、データベースへのインポートに使用するコードです。

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);
}

?>
4

2 に答える 2

1

悲しいことに、私はまったく同じ問題を抱えています!フォーマット方法を試しましたが、うまくいきませんでした。

それがあなたに当てはまるかどうかはわかりませんが、私が持ってきた解決策は、その前にアポストロフィを付けることでした!('YYYY / mm / dd)。Excel自体はアポストロフィを省略し、データをExcelのタイムスタンプとしてではなく、テキストとしてのみ表示します。このようにして、「/」でデータを分解し、希望どおりに配置できます。

ただし、すべての前にアポストロフィを付けることが不可能な場合は、が数値であるかどうかを確認し、* NIXのようなサーバーを想定して、ExcelタイムスタンプをUNIXタイムスタンプに変換してみてください。

=)

私はそれが最善の解決策ではないことを知っていますが、これまでのところ私が得ることができるものです。お役に立てば幸いです。

于 2013-09-30T16:10:04.507 に答える
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);
于 2013-10-25T06:47:27.100 に答える