2015-05-18 45 views
2

我在PHP/Jquery中編寫了一些內容,允許用戶從Excel上載Excel電子表格。然後,它接收電子表格中的數據,並將每個單元格中的值分配給一個變量,但出於某種原因,我很難用日期。 Excel中的任何日期都以數字形式出現,如41014,而不是04/15/2012(就像我在Excel中格式化爲text一樣)。將Excel的「41014」日期轉換爲PHP或JavaScript中的實際日期

如何將其轉換爲YYYY-MM-DD格式,以便它適合我正在使用的mySQL數據庫的其餘部分?我可以在PHP或Jquery中執行它,但在jQuery中執行它似乎對我更容易。

Excel的單元格

04/15/2012 

PHP的echo json_encode($var);

`{dateReceived: 41014}` 

jQuery的console.log(dateReceived);

41014 

更新

我實際上無法得到這裏提供的任何答案 - 我認爲php答案最初工作,但由於某種原因,我無法得到它輸出我需要的東西,但我發現了另一個我把一個簡單的公式放入函數中。如果其他人正在尋找一個答案,一個類似的問題,這裏就是我所做的:,(其中$ DATEVALUE是Excel的日期41014等)

function convertDate($dateValue) {  

    $unixDate = ($dateValue - 25569) * 86400; 
    return gmdate("Y-m-d", $unixDate); 
    'where Y is YYYY, m is MM, and d is DD 

} 

回答

2

直接從PHPExcel日期處理代碼摘自:

public static function ExcelToPHP($dateValue = 0) { 
    if (self::$ExcelBaseDate == self::CALENDAR_WINDOWS_1900) { 
     $myExcelBaseDate = 25569; 
     // Adjust for the spurious 29-Feb-1900 (Day 60) 
     if ($dateValue < 60) { 
      --$myExcelBaseDate; 
     } 
    } else { 
     $myExcelBaseDate = 24107; 
    } 

    // Perform conversion 
    if ($dateValue >= 1) { 
     $utcDays = $dateValue - $myExcelBaseDate; 
     $returnValue = round($utcDays * 86400); 
     if (($returnValue <= PHP_INT_MAX) && ($returnValue >= -PHP_INT_MAX)) { 
      $returnValue = (integer) $returnValue; 
     } 
    } else { 
     $hours = round($dateValue * 24); 
     $mins = round($dateValue * 1440) - round($hours * 60); 
     $secs = round($dateValue * 86400) - round($hours * 3600) - round($mins * 60); 
     $returnValue = (integer) gmmktime($hours, $mins, $secs); 
    } 

    // Return 
    return $returnValue; 
} // function ExcelToPHP() 

套自:: $ ExcelBaseDate ==作爲必要的自我:: CALENDAR_WINDOWS_1900以表明您使用的是Excel的基本日曆:1900的Windows或Mac 1904 ...最有可能1900

,如果你想要一個PHP DateTime對象:

public static function ExcelToPHPObject($dateValue = 0) { 
    $dateTime = self::ExcelToPHP($dateValue); 
    $days = floor($dateTime/86400); 
    $time = round((($dateTime/86400) - $days) * 86400); 
    $hours = round($time/3600); 
    $minutes = round($time/60) - ($hours * 60); 
    $seconds = round($time) - ($hours * 3600) - ($minutes * 60); 

    $dateObj = date_create('1-Jan-1970+'.$days.' days'); 
    $dateObj->setTime($hours,$minutes,$seconds); 

    return $dateObj; 
} // function ExcelToPHPObject() 
+0

哇,非常感謝!這正是我需要的。 –

+0

對於我的生活,我無法得到這個工作.......與更多的搜索,我找到了一個簡單的公式,我寫入一個函數。在任何其他人閱讀此主題尋找答案的事件中,我已經使用適用於我的解決方案更新了我的原始問題。 –

+1

這是班級的一部分,你確實在課堂裏把這兩種方法包裝起來了嗎?或靜態調用它們? –

1

如果你喜歡的JavaScript,我發現在GitHub以下公式:

new Date((excelDate - (25567 + 2))*86400*1000) 

工程爲您指定的日期。也許你可以試一試,看它是否會爲其他值返回正確的日期。

相關問題