2012-04-20 21 views
10

xlsxファイルタイプを読むのにsimplexlsx.class.phpを使用しています。ファイルにExcelの日付フィールドが含まれているときに問題が発生しています。PHPでsimplexlsxを使用してexcel xlsxファイルを読む

出力例:ファイル・データで

デイ日 木曜日2012年2月2日 金曜日2012年2月3日

プログラムの出力:

日時

木曜日40941
金曜日40942

それは正しい日付に

<?php 

if (isset($_FILES['file'])) { 

require_once "simplexlsx.class.php"; 

$xlsx = new SimpleXLSX($_FILES['file']['tmp_name']); 

echo '<h1>Parsing Result</h1>'; 
echo '<table border="1" cellpadding="3" style="border-collapse: collapse">'; 

list($cols,) = $xlsx->dimension(); 

foreach($xlsx->rows() as $k => $r) { 
    if ($k == 0) continue; // skip first row 
    echo '<tr>'; 
    for($i = 0; $i < $cols; $i++) 
    { 

     echo '<td>'.((isset($r[$i])) ? $r[$i] : '&nbsp;').'</td>'; 

    } 
    echo '</tr>'; 
} 
echo '</table>'; 
} 

?> 
<h1>Upload</h1> 
<form method="post" enctype="multipart/form-data"> 
*.XLSX <input type="file" name="file" />&nbsp;&nbsp;<input type="submit" value="Parse" /> 

+0

コード... – Baba

答えて

11

ものを与えていないだけで、Excelの内部形式で、正しい日付です:月1日1900からの日数は、(を可能に1900年はうるう年)。明らかに、simplexlsxクラスの何かが、xlsxの日付値をExcelの内部形式に変換しています。

私はsimplexlsxに遭遇していませんでした(これは私がPHP用のExcelファイルリーダー/ライターライブラリをすべて知っていると思ったので驚いています)...しかし、コードのどこかにその変換を処理する方法、私はまた、(PHPにExcelのタイムスタンプを変換)の逆のための方法があるだろうと想像する

あなたが望む方法は、コードであるEDIT

function unixstamp($excelDateTime) { 
    $d = floor($excelDateTime); // seconds since 1900 
    $t = $excelDateTime - $d; 
    return ($d > 0) ? ($d - 25569) * 86400 + $t * 86400 : $t * 86400; 
} 

I作る

:保証Oさらに

EDIT

function unixstamp($excelDateTime) { 
    $d = floor($excelDateTime); // seconds since 1900 
    $t = $excelDateTime - $d; 
    return ($d > 0) ? ($d - 25569) * 86400 + $t * 86400 : $t * 86400; 
} 


$dateVal = 40941; 
$unixDateVal = unixstamp($dateVal); 
var_dump($unixDateVal); 
echo date('d-M-Y',$unixDateVal); 

float 1328140800 
著しく今年の正しい範囲内のUNIXタイムスタンプ値のように見える

、十分な確認を与えて正確だということ

02-Feb-2012 

私には

+0

うまくいきません。私は実際の日付を返さないunixstamp関数に日付フィールドを送ります。 – MAK

+0

ありがとうございましたマークは働いています.. – MAK

+0

ありがとうございました –

関連する問題