2013-07-23 50 views
5

Tôi đang sử dụng php-excel-reader để đọc tệp XLS trong tập lệnh php của mình, mọi thứ đều hoạt động tốt, ngoại trừ việc đọc ngày. Nó đơn giản trả về một đối tượng không xác định.đọc xls ngày trong php

  • Tệp XLS không được tạo trên máy tính của tôi và tôi không biết với phiên bản phù thủy được tạo.
  • Nếu tôi mở tệp trên máy tính của mình và lưu lại, mọi thứ hoạt động tốt. (nhưng rõ ràng là tôi muốn tránh phải làm điều đó)
  • Sau khi thực hiện một số thao tác đào tạo trong tập lệnh đọc excel-php, tôi đã quản lý để lấy giá trị mà nó trích xuất từ ​​XLS. Ví dụ, thay vì 41.397 2013/03/05 (d/m/y)

Một vài câu hỏi:

  • Đây có phải là fixable?
  • Có thể khai thác 41397 không? Có phải định dạng ngày đã biết không?
  • Có tập lệnh xsl to php nào khác có thể hoạt động mà không phải thay đổi gì không?
+0

này là do định dạng ô sai. Cố gắng tạo một ngày trong Excel theo định dạng ngày tháng. Sau đó thay đổi định dạng ô thành số và bạn sẽ thấy một cái gì đó như 41397. – user4035

+0

đó là những gì tôi mặc dù có, nhưng tôi cần phải làm cho nó hoạt động mà không cần phải tự thay đổi trở lại định dạng ô và tất cả mọi thứ. – user1278743

+0

Hoặc sử dụng thư viện có thể xử lý các chuyển đổi ngày giữa Excel và PHP, chẳng hạn như [PHPExcel] (http://www.phpexcel.net) - bạn đã gắn thẻ PHPExcel này, nhưng không thực sự sử dụng PHPExcel; hoặc http://stackoverflow.com/questions/11172644/php-convert-the-full-excel-date-serial-format-to-unix-timestamp/11172688#11172688 –

Trả lời

14

Theo định dạng excel 41397 is 2013-05-03

Excel cửa hàng ngày và thời gian như một số đại diện cho số ngày kể từ năm 1900-Jan-0, cộng với một phần phân đoạn của một ngày 24 giờ:
ddddd.tttttt. Đây được gọi là ngày nối tiếp, hoặc ngày giờ nối tiếp.

Bạn có thể sử dụng đoạn mã sau để chuyển đổi số để ngày hợp lệ

function excelDateToDate($readDate){ 
    $phpexcepDate = $readDate-25569; //to offset to Unix epoch 
    return strtotime("+$phpexcepDate days", mktime(0,0,0,1,1,1970)); 
} 

php-excel-reader là nghĩa vụ phải làm điều này, nhưng không biết tại sao nó không được làm việc đó.

Bạn có thể nhận được thông tin thêm về cách vượt trội cửa hàng hẹn hò với here (không phải là một tài liệu tham khảo đáng tin cậy như MSDN)

Edit: Checked PHPExcel, trông giống như chức năng tĩnh PHPExcel_Shared_Date::ExcelToPHP($dateValue = 0, $adjustToTimezone = FALSE, $timezone = NULL) thực hiện điều này.

+0

cảm ơn, tôi đã thử tự chuyển đổi thành ngày hợp lệ , nhưng tôi không biết về -25569. – user1278743

+0

-25569 nó để điều chỉnh từ 1900-Jan-0 đến Unix Epoch (ngày 1 tháng 1 năm 1970 00:00:00 GMT) và excel nghĩ rằng có tồn tại ngày 1900-Feb-29 – bansi

1

Một cách dễ dàng ...

<?php $date = date_create('30-12-1899'); date_add($date, date_interval_create_from_date_string('41397 days')); echo date_format($date, 'Y-m-d'); ?>