无法在 excel 文件中存在的 php mysql 表中存储日期值


Unable to store Date values in php mysql table that are existing in excel file

嗨,朋友们,我有一个PHP程序,用户可以在其中上传存储在PHP数据库中的Excel文件和数据,它按我的预期工作,但问题是存储在数据库中的日期与我在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 中存储了以下日期9/1/2014,28/12/2013 ,27/9/1991 ,1/1/2015 ,31/12/2014 ,1/1/2012 ,2001/5/9 .

但是存储在数据库中的是1970-01-01 ,1970-01-01 ,1970-01-01 ,1970-01-01 ,1970-01-01 ,1970-01-01 ,1970-01-01 ,1970-01-01.

请协助我解决这个问题,谢谢

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 将日期作为integer值返回。自 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) 选择"

英语(印度)"作为格式,选择"dd-MM-yyyy"作为短日期。

6) 单击确定。然后重试,如果有任何问题,请发表评论。

打印 sql 查询并检查查询中插入了哪些值。日期格式应为"Y-m-d"。

只需从 excel 工作表的日期列中删除所有格式即可。然后重试。这可以帮助您PHP始终Spreadsheet_Excel_Reader读取日期为1999年11月30日 http://dirtyhandsphp.blogspot.in/2012/03/phpexcelreader-uses-and-problems.html