嗨, friend 们,我有一个 php 程序,用户可以上传 excel 文件,数据将存储在 php 数据库中,它按我的预期工作,但问题是存储在数据库中的日期与我在 excel 中输入的数据完全不同
我使用以下代码从 Excel 中读取值..
include("excel/reader.php");
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');
$data->read($_POST['upload']);
$conn = mysql_connect("localhost","root","");
mysql_select_db("mydatabase",$conn);
$a="TRUNCATE TABLE `sheet`";
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];
$dosstr=strtotime($ds);
$dos=date('Y-m-d',$dosstr);
$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);
}
header('location:exsheet2.php');
?>
我在 Excel 中存储了以下日期 2014 年 9 月 1 日, 2013年12月28日 , 1991 年 9 月 27 日, 2015 年 1 月 1 日, 2014 年 12 月 31 日 , 2012 年 1 月 1 日 , 2001 年 5 月 9 日。
但是数据库中存储的是 1970年1月1日 , 1970年1月1日 , 1970年1月1日 , 1970年1月1日 , 1970年1月1日 , 1970年1月1日 , 1970年1月1日 , 1970年1月1日。
请帮助我解决这个问题,谢谢
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;
echo "<br>";
if(ctype_digit($ds))
{
date_default_timezone_set("Asia/Kolkata");
$dDate = date_create('1900-01-01');
$dDate = date_modify($dDate, '+'.($ds-2).' day');
if($dDate!="")
{
$dos = date_format($dDate,'Y-m-d');
echo "IF".$dos;
echo "<br>";
}
else
{
$dos=$ds; //not able to convert date so show it directly
echo "Else".$dos;
echo "<br>";
}
}
else
{
$dos=$ds;
echo"if Else".$dos;
}
$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);
}
最佳答案
发现实际问题出在您的日期函数中。您不能使用这些 php 函数,因为它们用于 unix 时间戳。 excel 将日期返回为整数值。 自 1900 年 1 月 1 日以来的天数,包括第一天和最后一天
所以替换这些行:
$dosstr=strtotime($ds);
$dos=date('Y-m-d',$ds);
至
date_default_timezone_set("Asia/Kolkata");
$dDate = date_create_from_format('Y-m-d', '1900-01-01');
$dDate=date_add($dDate, date_interval_create_from_date_string(($ds-2).' days'));
$dos=$dDate->format('Y-m-d');
PHP 5.2 版本:
date_default_timezone_set("Asia/Kolkata");
$dDate = date_create('1900-01-01');
if($dDate = date_modify($dDate, '+'.($ds-2).' day'))
$dos = date_format($dDate,'Y-m-d');
else $dos=$ds; //not able to convert date so show it directly
或安全代码:
if(ctype_digit($ds)){
date_default_timezone_set("Asia/Kolkata");
$dDate = date_create('1900-01-01');
$dDate = date_modify($dDate, '+'.($ds-2).' day');
if($dDate!="") //if($dDate) //is_a($dDate,'DateTime')) //get_class($dDate)=='DateTime' //if ($dDate instanceof DateTime)
$dos = date_format($dDate,'Y-m-d');
else $dos=$ds;
}
else $dos=$ds;
<小时/>
获取日期大于 12
的错误日期的问题原因是:您将日期存储在 Excel 中作为印度日期。但您的笔记本电脑的默认日期和时间是美国或英国...
您需要先更改它(在区域和语言设置中)。
1) 单击窗口中任务栏右侧显示的时间。
2) 在日历下,您将看到一个链接“更改日期和时间设置”。打开它。
3) 点击“更改日期和时间”按钮 -> 然后点击更改日历设置链接。
4) 可能还会打开两个窗口。关闭自定义格式窗口并转到“区域和语言”。
5) 选择“English(India)”作为格式,选择“dd-MM-yyyy”作为短日期。
6) 单击“确定”。然后再尝试,如果有问题,评论。
关于php - 无法在 php mysql 表中存储 Excel 文件中存在的日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27720292/