如何迅速转换日期格式 yyyy-mm-dd转为yyyy/mm/dd

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何迅速转换日期格式 yyyy-mm-dd转为yyyy/mm/dd相关的知识,希望对你有一定的参考价值。

首先如果格式为dd/mm/yyyy的日期为date类型,那么很easy,利用simpledateformat类就可以,具体:
simpledateformat
sdt
=
new
simpledateformat();
sdt.setformat("yyyy-mm-dd");//mm一定是大写,小写代表分钟
sdt.format(date);//date就是你得到的那个dd/mm/yyyy的日期
想转换回来就按上面说的把格式转换回来就ok了
如果是string
类型的,那么估计要费事了,你需要不停的用substring()方法把字符串截取拼接,这个应该是最简单的方法了。
参考技术A 修改"语言与区域选项"里面的短日期格式,以后你看到的都是yyyy/mm/dd格式的日期,不再需要其它修改
开始---设置---控制面板---语言与区域选项---自定义---日期---短日期格式
设置为:
yyyy/mm/dd
确定
回答补充问题:
你补充的问题说明,你的数据是文本格式,可以参照下图,选择日期所在列,按下图指引操作

Excel 日期值检索为 DD/MM/YY,如何将其格式化为 YYYY-MM-DD?

【中文标题】Excel 日期值检索为 DD/MM/YY,如何将其格式化为 YYYY-MM-DD?【英文标题】:Excel Date value retrieved as DD/MM/YY,how to format it to YYYY-MM-DD? 【发布时间】:2016-03-01 05:01:15 【问题描述】:

在转换从 excel 表中检索到的日期时,YEAR 被插入为 20XX 而不是 19xx。

点击excel表格中的单元格,我们可以知道年份并且正确显示,但是在插入时,19xx被插入为20xx。

当我回显从 Excel 表中检索到的日期时-

    echo date('Y-m-d', strtotime($data[3]));
    exit();  //output 1970-01-01

   echo $data[3];
    exit();  //output 22/11/66

我尝试了以下方法-

1. $dob=date('Y-m-d', strtotime(str_replace('/', '.', $data[3])));

输出 - 有些年份正确,但有些 19xx 显示为 20xx

示例-2066-11-22 而不是 1966-11-22

2. $dob = implode('-', array_reverse(explode('/', $data[3])));

输出-YY-MM-DD

3. $dob=date('Y-m-d', strtotime(str_replace('/', '-', trim($data[3]))));

输出 - 1970-01-01

在模型中从excel中检索数据-

function upload()
   ini_set('auto_detect_line_endings',TRUE);
 /* if (is_uploaded_file($_FILES['userfile']['tmp_name'])) 

  readfile($_FILES['userfile']['tmp_name']);
    */
    if (($handle = fopen($_FILES['userfile']['tmp_name'], "r")) !== FALSE) 
    $firstRow = true;
        while (($data = fgetcsv($handle, 4096, ",",'"')) !== FALSE)
        
         $num = count($data);
                if($data[0]!="")
                    //echo implode('-', array_reverse(explode('/', $data[3])));exit();
                    if($data[3]!="")
                    
                        //$dob=date('Y-m-d', strtotime(str_replace('/', '.', $data[3])));
                        //$dob=date("Y-m-d", strtotime($data[3]));
                        //$dob = implode('-', array_reverse(explode('/', $data[3])));
                        //$dob=date("Y-m-d", strtotime($date));
                        $dob=date('Y-m-d', strtotime(str_replace('/', '-', trim($data[3]))));
                    
                     $data1 = array(
                    'member_name' => $data[1],
                     'member_phone' => $data[2],
                     'member_dob' => $dob,
                     'member_outlet' => $data[4]
                   );
                  //echo "<pre/>";print_r($data) ;exit(); 
                       $this->db->insert('member_info', $data1);
                       $member_id = $this->db->insert_id();
                

        

//echo "<pre/>";print_r($data) ;exit();
     fclose($handle); 
    
ini_set('auto_detect_line_endings',FALSE);             
           


有什么建议吗?

【问题讨论】:

【参考方案1】:

我认为以下代码很糟糕 - 我宁愿尝试更改 Excel 电子表格的日期格式 - 但它适用于您提供的示例日期:

$data[3] = '22/11/66'; 
$arr = explode('/', $data[3]);
$dob = date("Y-m-d", strtotime('19' . $arr[2] . '/' . $arr[1] . '/' . $arr[0]));
echo var_dump($dob);

PHP 处理 1970 年之前两位数年份的方式似乎存在问题。使用来自 PHP documentation 的 dd.mm.yy 格式的示例日期...

$dob = date("Y-m-d", strtotime("30.6.08"));
echo var_dump($dob); // 2008-06-30

$dob = date("Y-m-d", strtotime("30.6.66"));
echo var_dump($dob); // 1970-01-01

$dob = date("Y-m-d", strtotime("30.6.1966"));
echo var_dump($dob); // 1966-06-30

我需要将“19”添加到两位数的年份以获取 strtotime 以了解年份。

【讨论】:

但问题是有些年份是 19xx,有些是 20xx,那怎么办? 您的意思是通过更改日期格式来创建新的 Excel 工作表吗? 如果您的 Excel 工作表具有 DD/MM/YY 格式的日期,例如 31/01/12,我看不出您将如何编写一个函数来区分 31/01/2012 和 31 /01/1912。您可以假设像 00 到 20 这样的两位数年份总是意味着 2000 到 2020 年,而像 21 到 69 这样的年份总是 1921-1969 或类似的年份,但这似乎是一个杂牌。如果可能,我会更改 Excel 工作表日期格式。【参考方案2】:

我遇到了和上面一样的问题,

但是 我没有在 php 端进行处理,而是 将 excel 文件的列数据类型更改为 text 替换 date

现在我在 php 方面所做的一切都是我们经常做的:

<?php
  $date = date("Y-m-d", strtotime($excel_date));
 //here you can insert it in your db table if you want.
?>

但是如果你无法控制将要上传的excel文件,那么请使用上面的php处理解决方案。

【讨论】:

以上是关于如何迅速转换日期格式 yyyy-mm-dd转为yyyy/mm/dd的主要内容,如果未能解决你的问题,请参考以下文章

SQL日期格式转换? [dd.mm.yy 到 YYYY-MM-DD]

Excel 日期值检索为 DD/MM/YY,如何将其格式化为 YYYY-MM-DD?

java如何yyyy-mm-dd格式转换成dd-mon-yy格式

如何将MYSQL中的混合日期转换为yyyy-mm-dd格式

sql如何将字符串转为日期

怎么将mysql查询的日期类型转为yyyy-MM-dd