首页 > 解决方案 > 如何将日期固定为类似的格式?

问题描述

我收到 2 种日期格式:

1/22/2020

1/22/20

我需要转换1/22/20201/22/20

我目前使用以下内容,但我不确定如何进行检查并在添加日期之前进行转换

    foreach($header as $field){
        if (preg_match("/([1-9]|1[0-2])\/([1-9]|[1-2][0-9]|3[0-1])\/[0-9]{2}$/",$field)) {

            if($insert){
                $days[] = ["date" => $field, $type => $value[$field]];
            }
            else{
                $date_index = array_search($field, array_column($globalData[$index]['data'], 'date'));

                $globalData[$index]['data'][$date_index][$type] = $value[$field];
            }
        }
    }

标签: php

解决方案


您可以使用 php DateTime::createFromFormat函数以更强大的方式转换日期。

// filter only 4 digit year using regex
if (preg_match('/^\d{1,2}\/\d{1,2}\/\d{4}$/', $date)) {
    $dateObj = DateTime::createFromFormat('n/d/Y', $date);
    if ($dateObj === false) {
      throw new Exception("Not a valid date");
    }
    // convert it to 2 digit year
    echo $dateObj->format('n/j/y');
}

以下是它如何适用于您的问题

<?php
    foreach($header as $field){
        if (preg_match('/^\d{1,2}\/\d{1,2}\/\d{4}$/', $field)) {
            $dateObj = DateTime::createFromFormat('n/d/Y', $field);

            if ($dateObj === false) {
                throw new Exception("Not a valid date");
            }
            // convert it to 2 digit year
            $field = $dateObj->format('n/j/y');

            if($insert){
                $days[] = ["date" => $field, $type => $value[$field]];
            }
            else{
                $date_index = array_search($field, array_column($globalData[$index]['data'], 'date'));

                $globalData[$index]['data'][$date_index][$type] = $value[$field];
            }
        }
    }

推荐阅读