我有一个数字,例如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, 有什么建议吗?或链接的过程是什么?
感谢任何帮助
答案 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));