从shortDateFormat创建完整的longdate格式

时间:2019-02-13 14:40:51

标签: php laravel

我有一个数字,例如9212265447(男人)或8856145441(女人),这意味着前两位数字是1992或1988年,而男人的第3位和第4位数字是出生后一个月,而女人的5位或6位则是第三位。只是它是女人的信息。如果女人从1月至9月出生,则10月至5月有5岁。 7060208520-60代表1970年10月20日出生,61代表12月62日出生。 第5位和第6位数字表示出生日期。

9212265447-1992年12月26日

8856145441-14.6.1988

我需要将这些数字转换为PHP中的日期格式DD.MM.YYYY, 有什么建议吗?或链接的过程是什么?

感谢任何帮助

2 个答案:

答案 0 :(得分:0)

// $number = '9212265447';

private function getDateFromNumber($number){

    $regex = '/^(\d{2})(\d{2})(\d{2})(\d{4})$/m';

    if(preg_match_all($regex, $number, $matches, PREG_SET_ORDER, 0)){

        // $matches has 
        // array:1 [
        //   0 => array:5 [
        //     0 => "9212265447"
        //     1 => "92"
        //     2 => "12"
        //     3 => "26"
        //     4 => "5447"
        //   ]
        // ]

        $detail = $matches[0];
        $year = $detail[1];
        $month = (string)$detail[2];
        $date = $detail[3];

        if(in_array($month[0], [5,6])){
            // Women 
            $month = ($month[0] == 6) ?  $month + 9 : $month;
        }

        $date = $month . '-' . $date . '-' . $year;

        return Carbon::createFromFormat('m-d-y', $date)->format('Y-m-d');
    }
    else{

        throw new \Exception('Invalid format');
    }
}

答案 1 :(得分:0)

如果Google翻译一切正常,并且我理解这里写的内容-https://cs.wikipedia.org/wiki/Rodn%C3%A9_%C4%8D%C3%ADslo,结果可以像这样完成:

<?php
$man = "9212265447";
$woman = "8856145441";
$test = "7060208520";

function parse(string $socialNumber): \DateTime
{
    $year = 1900 + substr($socialNumber, 0, 2);
    $month = substr($socialNumber, 2, 2);
    if ($month >= 50) {
        $month -= 50;
    }
    $day = substr($socialNumber, 4, 2);

    return (new \DateTime())->setDate($year, $month, $day);
}

var_dump(parse($man));
var_dump(parse($woman));
var_dump(parse($test));