【问题标题】:Why some of date format are not correct in excel sheet in php laravel?为什么某些日期格式在 php laravel 的 excel 表中不正确?
【发布时间】:2021-07-02 09:33:46
【问题描述】:

我正在导出 csv 文件,我的列之一是日期,但某些行的日期格式发生了变化,我不明白为什么 应该是d-m-Y H:i:s,但给d/m/Y H:i:s

这是我的代码

    $headers = array(
      "Content-type" => "text/csv",
      "Content-Disposition" => "attachment; filename=Consignment Income Invoice.csv",
      "Pragma" => "no-cache",
      "Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
      "Expires" => "0"
    );

    $callback = function () use ($consignments, $sheet_header_columns, $db_columns) {
      $output = fopen("php://output", "wb");
      fputcsv($output, $sheet_header_columns);

      foreach ($consignments as $consignment) {
        $sheet_row = [];
        foreach ($db_columns as $column) {
          if ($column == 'customers') {
            $column_value = $consignment->customers->name;
          } elseif ($column == 'delivery_runs') {
            $column_value =  $consignment->delivery_runs->name ?? '';
          } elseif ($column == 'pickup_address') {
            $column_value =  $consignment->pickup_addresses->full_address ?? '';
          } elseif ($column == 'delivery_address') {
            $column_value =  $consignment->delivery_addresses->full_address ?? '';
          } elseif ($column == 'income') {
            $column_value =  $consignment->charges->sum('income') ?? '';
          } elseif ($column == 'driver_name') {
            $column_value = $consignment->run_sheets->drivers->name ?? '';
          } elseif ($column == 'date_delivered') {
            $column_value =  setDateTimeFormat($consignment->date_delivered);
          } elseif ($column == 'created_at') {
            $column_value = setDateTimeFormat($consignment->created_at);
          } elseif ($column == 'delivery_date') {
            $column_value =  setDateFormat($consignment->delivery_date);
          } else {
            $column_value =   $consignment->$column;
          }
          array_push($sheet_row,$column_value);
        }
        fputcsv($output, $sheet_row); // here you can change delimiter/enclosure
      }

      fclose($output);

    };
    return response()->stream($callback, 200, $headers);

setDateTimeFormat()函数

function setDateTimeFormat($date)
{
    if (!empty($date)) {
        $date = date(getDateTimeFormat(), strtotime($date));
        $date = str_replace('-','/',$date);
        if ($date == "01-01-1970 10:00:00") {
            return "";
        }
        return $date;
    } else {
        return "";
    }
}

我在导出之前设置了日期时间格式。但它仍然在改变格式不知道为什么。

【问题讨论】:

    标签: php laravel laravel-5 export-to-excel


    【解决方案1】:

    在记事本中查看导出的数据,而不是在 Excel 中。我假设 Excel 中该特定列的格式需要月/日/年,但您在 CSV 文件中提供日-月-年。对于像 23-09-2021 这样的值,Excel 不知道如何将其格式化为有效日期(一年中只有 12 个月,而不是 23 个月),因此“按原样”显示值。 Excel 格式可以识别以 12 或更少开头的日期值并转换为有效日期。

    【讨论】:

    • 我们如何阻止它转换?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多