Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从shortDateFormat创建完整的longdate格式_Php_Laravel - Fatal编程技术网

Php 从shortDateFormat创建完整的longdate格式

Php 从shortDateFormat创建完整的longdate格式,php,laravel,Php,Laravel,我有9212265447(男性)或8856145441(女性)这样的数字,这意味着前两位数字是1992年或1988年,对于男性来说,第三位和第四位数字是出生月份之后的数字,但对于女性来说,第三位的5或6只不过是女性的信息。如果女性从1月到9月出生,从10月到12月出生的女性有5个,从10月到12月出生的女性有6个。 7060208520-60表示1970年10月20日出生,61年11月62日至12月。 第5位和第6位数字表示出生日期 9212265447-26.12.1992 885614544

我有9212265447(男性)或8856145441(女性)这样的数字,这意味着前两位数字是1992年或1988年,对于男性来说,第三位和第四位数字是出生月份之后的数字,但对于女性来说,第三位的5或6只不过是女性的信息。如果女性从1月到9月出生,从10月到12月出生的女性有5个,从10月到12月出生的女性有6个。 7060208520-60表示1970年10月20日出生,61年11月62日至12月。 第5位和第6位数字表示出生日期

9212265447-26.12.1992

8856145441-14.6.1988

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


感谢您的帮助

如果google translate一切正常,并且我理解这里写的内容-结果可以如下所示:

// $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');
    }
}
<?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));

这让人困惑。我建议找到一种不同的方法来存储这些数字,因为你在确定是男人还是女人时会遇到问题(除非你用05来表示五月而不是5,然后很难解析它。56==June???@devpro我认为这来自“如果是女人,5或6,从一月到九月的出生月份是5,十月到十二月是6”。非常混乱。@aynber:我建议您以适当的格式存储数据。您事先知道9212265447是男性的记录,8856145441是女性的记录吗?