我有Excel表格,它有不同的列,但我需要在数据库中添加一些特定的列(电子邮件,日期和时间)。日期从2014年9月7日开始,每件事情都运行良好,直到9月12日/ 14,但当这一天变为13到月底时,我将1970-01-01 01:00:00进入数据库,当月份变为10时,一切都很好,直到10 / 12/14再次形成13我将1970-01-01 01:00:00进入数据库。
这是我的insert.php代码
session_start();
$target_dir = $_SESSION["targetDir"];
$file_name = $_SESSION["fileName"];
ini_set('memory_limit', '512M');
require_once 'excel_reader2.php';
require_once 'dbConn.php';
$data = new Spreadsheet_Excel_Reader($target_dir);
for($i=0;$i<count($data->sheets);$i++) // Loop to get all sheets in a file.
{
switch ($i) {
case 1:
echo "<p class='font_p'>Rows in Sheet $i : " . count($data->sheets[$i]['cells'])."    " ;
$countWithHeader = count($data->sheets[$i]['cells']);
$finalCount = $countWithHeader - 1;
for ($j = 1; $j <= count($data->sheets[$i]['cells']); $j++) // loop used to get each row of the sheet
{
$data->sheets[$i]['cells'][$j][1];
$email = mysqli_real_escape_string($connection, $data->sheets[$i]['cells'][$j][1]);
$first_name = mysqli_real_escape_string($connection, $data->sheets[$i]['cells'][$j][2]);
$last_name = mysqli_real_escape_string($connection, $data->sheets[$i]['cells'][$j][3]);
$in_time = mysqli_real_escape_string($connection, $data->sheets[$i]['cells'][$j][5]);
$out_time = mysqli_real_escape_string($connection, $data->sheets[$i]['cells'][$j][6]);
$timestampIn = date('Y-m-d H:i:s',strtotime($in_time));
$timestampOut = date('Y-m-d H:i:s',strtotime($out_time));
$query = "INSERT INTO study_table (email,last_name,first_name,in_time,out_time)
VALUES ('".$email."','".$first_name."','".$last_name."','".$timestampIn."','".$timestampOut."')";
mysqli_query($connection, $query);
}
break;
case 2:
答案 0 :(得分:0)
功能strtotime()
将在您的代码中返回false
:
$timestampIn = date('Y-m-d H:i:s', strtotime($in_time));
因为$in_time
格式无效(14/09/2014 14:50
)。函数将14/09/2014
解析为m/d/Y
格式,但您尝试将其用作d/m/Y
。 See here for demo
简单的解决方案是将日期分隔符/
替换为-
,因为格式更改为d-m-Y
,这是有效的,strtotime()
将知道如何解析它。 See here for demo并请RTM here查看有效的日期格式。
解析未知格式的最佳解决方案使用DateTime::createFromFormat()
方法:
$in_time = DateTime::createFromFormat('!d/m/Y H:i', $in_time);
echo $in_time->format('Y-m-d H:i:s');