2011-03-07 47 views
1

我試圖用這個類來導入大量的數據。 大部分數據正在被正確讀取,但我有兩個日期列給我的問題。PHP Spreadsheet_Excel_Reader - 閱讀日期

日期格式爲DD/MM/YYYY,並且返回的值比電子表格中的日期早一天。例如,04/03/2011變得05/03/2011

我試圖訪問這樣的數據:

$data->sheets[$sheet]['cells'][$row][$col]; 

我已經使用原始數據也嘗試:

$data->sheets[$sheet]['cellsInfo'][$row][$col]['raw'] 

它將日期返回爲unix時間戳,但仍然比它應該提前一天。

有無論如何我可以強制類返回列的值作爲一個簡單的字符串?

任何意見讚賞。

謝謝。

回答

2

Spreadsheet_Excel_Reader使用標準PHP date()函數將Excel數值日期/時間戳轉換爲PHP日期字符串。在Excel中保存爲日期/時間戳的數值實際上是UTC,因此這可能是時區問題。嘗試在導入工作簿之前在您的PHP腳本中發佈UTC到date_default_timezone_set()

+0

謝謝。 UTC沒有工作,但我設法讓它與另一個時區一起工作。 – Dan 2011-03-07 11:48:55

0

我認爲文件中的日期不是Excel日期格式。這可能嗎?

你能像字符串那樣得到字段,然後用MM/DD/YYYY格式格式化另一個字符串並使用strtotime函數嗎?

2

我有同樣的問題,我有一個小功能解決它......

$區= dateadde( 「d」, - 1,$細胞);

其中: [ #輸入日期= 23/08/2011

function dateadde($interval, $number, $date) 
{ 
    $jour=substr("$date", 0, 2); 
    $mois=substr("$date", 3, 2); 
    $annee=substr("$date", 6, 4); 
    $adate = mktime(0,0,0,$mois,$jour,$annee); 

    $date_time_array = getdate($adate); 
    $hours = $date_time_array['hours']; 
    $minutes = $date_time_array['minutes']; 
    $seconds = $date_time_array['seconds']; 
    $month = $date_time_array['mon']; 
    $day = $date_time_array['mday']; 
    $year = $date_time_array['year']; 
    switch ($interval) 
    { 
     case 'yyyy': 
      $year+=$number; 
      break; 
     case 'q': 
      $year+=($number*3); 
      break; 
     case 'm': 
      $month+=$number; 
      break; 
     case 'y': 
     case 'd': 
     case 'w': 
      $day+=$number; 
      break; 
     case 'ww': 
      $day+=($number*7); 
      break; 
    } 
    $timestamp= mktime(0,0,0,$month,$day,$year); 
    $jourascii=strftime("%d/%m/%Y",$timestamp); 
    return $jourascii; 
} 

]

如此糟糕的編輯!