【问题标题】:Unable to read date from excel in php无法从 php 中的 excel 读取日期
【发布时间】:2015-01-02 16:38:56
【问题描述】:

谁能帮我找出以下代码有什么问题...这些是我在我的 excel 26-1-2013 28-12-2013 中的日期,但它会打印 1970-01-01

我尝试了不同的功能,例如 date_create 和 date_modify,但没有任何效果我在我的 prog 中使用过 date fun,但它不起作用。

 <?php
include("excel/reader.php");
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');
$data->read($_POST['upload']);
$conn = mysql_connect("localhost","root","");
mysql_select_db("omega",$conn);
mysql_query($a);
for ($x = 2; $x <= count($data->sheets[0]["cells"]); $x++) 
{
$inv = $data->sheets[0]["cells"][$x][1];
$ds = $data->sheets[0]["cells"][$x][2];
echo "ds=".$ds;
echo "<br>";
$dos= date('Y-m-d',strtotime(str_replace('/','-',$ds)));
echo "$dos=".$dos;
echo "<br>";
$ptname = $data->sheets[0]["cells"][$x][3];
$bal = $data->sheets[0]["cells"][$x][4];
$proname = $data->sheets[0]["cells"][$x][5];
  $sql = "INSERT INTO sheet (INV,DOS,PTNAME,BAL,PROV)
VALUES ('$inv','$dos','$ptname','$bal','$proname')";
mysql_query($sql);
}
  ?>

【问题讨论】:

  • 我得到以下输出:41300=41300 1970-01-01=1970-01-01 41636=41636 1970-01-01=1970-01-01

标签: php excel date


【解决方案1】:

这些日期不在format that can be interpreted by strtotime() 中。您需要使用DateTime::createFromFormat() 来解释这些日期,然后才能将它们转换为新格式。

$date = DateTime::createFromFormat('j-n-Y', '26-1-2013');
$dos = $date->format('Y-m-d');

【讨论】:

  • 要使用 DateTime 必须包含 IOFactory.php 对吗?
  • 没有。它是一个内置的 PHP 类。
  • 没有。 RTFM:php.net/manual/en/class.datetime.php datetime 自 5.2.0 以来一直是核心 php 库
  • 我得到了这个错误:- 调用未定义的方法 DateTime::createfromformat()
  • 你运行的是什么版本的 PHP?
【解决方案2】:

您正在读取的值实际上是 MS Excel 时间戳,通常是自 1900 年 1 月 1 日以来的天数(如果电子表格使用 Mac 1904 日历,它可能是自 1904 年 1 月 1 日以来的天数)

您需要将其转换为 Unix Timestamp 才能使用 PHP 日期函数....取决于正在使用的日历,这是一个快速而肮脏的转换:

Windows 1900 日历

$unixTimestamp = ($excelTimestamp - 25569) * 86400;

反过来

$excelTimestamp = ($unixTimestamp / 86400) + 25569;

Mac 1904 日历

$unixTimestamp = ($excelTimestamp - 24107) * 86400;

反过来

$excelTimestamp =  ($unixTimestamp / 86400) + 24107;

所以 MS Excel 41300 => $unixTimestamp = (41300 - 25569) * 86400; 给出 1359158400 这是 26th January 2013 的 unix 时间戳

【讨论】:

  • 是的,先生,现在 $unixTimestamp 返回值 1359158400 我可以使用什么函数将其转换为 2013-01-26 的形式
  • 如果我使用 DateTime::cretaeFromFormat 可能会得到解决,但问题是我使用 php 5.2.2 它不支持 createFromFormat 在 php 版本 5.2.2 中是否有任何替代此功能的方法跨度>
  • 1359158400 是一个 Unix 时间戳,所以你可以简单地使用标准的 PHP date() 函数:echo date('Y-m-d', $unixTimestamp);
猜你喜欢
  • 1970-01-01
  • 2018-04-14
  • 2012-01-19
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多