2012-06-20 24 views
18

このコードをこの形式で使用して読むと、2012年5月12日日/月/年のという形式のExcelの日付が読み込まれます。 PHP EXCELがPHP Excelを使用したExcelの日付変換

PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD'); 

日がある場合

今問題ができている2012年12月5日 『』に上記の日付'12/5/2012' 変換魅力のようなその作業は5分の18を使用して言います/ 2012またはあなたは私が12を上回る日を設定した場合、それは

をフォーマットする後に私も

 $temp = strtotime( PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD'); 
     $actualdate = date('Y-m-d',$temp) ; 

この事を試してみました。この形式18/5/2012に私にこの日付18/5/2012を与えると言うことができますこれは、日付'12/5/2012 2012年5月18日2012年5月18日2012年5月18日01:30

+0

をあなたが与える例はまだ正しく変換されていません - 2012年12月5日英国からISO形式に変換するとき2012-05-12 – SeanC

+0

はいあなたの権利havent気づいた.....この形式で取得するには2012 - 05-12私はストリングを作らなければならないこのような形式YYYY-DD-MM –

+1

値はExcelのDateTimestampですか、それとも文字列ですか?前者の場合、ExcelToPHP()やExcelToPHPObject()などのPHPExcel_Shared_Date変換メソッドを使用してみませんか?後者の場合は、toFormattedString()を使用しないでください。 –

答えて

0

変数が文字列であるか、米国の書式日付が必要です。実際の日付形式

$date = DateTime::createFromFormat('d/m/y', $value['A']); 
echo $date->format('Y-m-d'); 
+0

ありがとうございました。試してみてください。 –

+0

致命的なエラー:オブジェクト以外のオブジェクトのメンバ関数の形式()を呼び出すと、このエラーが表示されます。 –

+1

エコーが機能しない場合、それは小さな問題です - 'PHPExcel_Style_NumberFormat :: toFormattedString(DateTime :: createFromFormat( 'd/m/y'、$ value ['A'])、 'YYYY-MM-DD' ); ' – SeanC

50

に日付をキャストする
使用「のDateTime :: createFromFormat」あなたは本当の日付を取得するには、「gmdate」を使用することができ、Unixの日付にExcelの日付から変更するには、この式を使用してください変数にこの数式を入れた後

EXCEL_DATE = 25569 + (UNIX_DATE/86400) 

UNIX_DATE = (EXCEL_DATE - 25569) * 86400 

とExcelの日付にUnixの日から変換するには、次の式を使用します。PHPで、あなたは、この例を使用してPHPで実際の日付を取得することができます:

$UNIX_DATE = ($EXCEL_DATE - 25569) * 86400; 
echo gmdate("d-m-Y H:i:s", $UNIX_DATE); 
+0

パーフェクト。しかし、25569と86400の意味を教えてください。 – idok

+2

できます。 86400は1日の秒数= 24 * 60 * 60です。25569は1900年1月1日から1970年1月1日までの日数です。Excelの基準日は1900年1月1日で、UNIXは1970年1月1日です。 UNIXの日付の値は、1970年1月1日(1969年12月31日深夜)から秒単位で表示されます。だから変換するには、数を減算してから秒に変換する必要があります。 – TJChambers

+1

build-int関数toFormattedStringを使用できますか?echo PHPExcel_Style_NumberFormat :: toFormattedString(42033、 'YYYY-MM-DD');出力されます2015-01-29 –

2

簡単な方法...

<?php 
    $date = date_create('30-12-1899'); 

    date_add($date, date_interval_create_from_date_string("{$value['A']} days")); 
    echo date_format($date, 'Y-m-d'); 
16

PHPExcelを使用する場合は、あなたが機能で構築使用することができます。

$excelDate = $cell->getValue(); // gives you a number like 44444, which is days since 1900 
$stringDate = \PHPExcel_Style_NumberFormat::toFormattedString($excelDate, 'YYYY-MM-DD'); 
+0

ベストアンサーこれまでの作業...完璧かつ非常に安全で使いやすい使用方法...ありがとうございました!!! –

+0

あなたは大歓迎です! – caponica

+0

非常に助かりました、ありがとう! – adrianp

関連する問題