Php 从shortDateFormat创建完整的longdate格式
我有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, 有什么建议吗?或者链接的过程是什么呢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
感谢您的帮助如果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是女性的记录吗?