致力于将英国牌照的数字部分转换为注册年度的数字部分。
目的是采取例如55/03/62
输出它们应该如何:2005/2003 / 2012
我最初的计划是:
function convertPlateYearToYYYY($vrmYear) {
$firstDigit = substr($vrmYear, 0, 1);
$secondDigit = substr($vrmYear, 1, 1);
if ($firstDigit == 6) {
$partOne = '1';
} else {
$partOne = '0';
}
$date = "20" . $partOne . $secondDigit;
return $secondDigit;
}
$vrmYear = '05'
echo convertPlateYearToYYYY($vrmYear);
这样可以正常工作,但如果提交一个以0开头的值(如示例中所示),则substr似乎失败并且不返回任何内容。我该如何克服这个问题?
答案 0 :(得分:2)
首先,当您认为自己想要在函数中执行return $secondDigit;
时,您正在使用return $date;
。
在不进一步讨论您的问题的情况下,这里有一个工作解决方案,可以将字符串的第一个和第二个数字作为数组访问,而不是使用substr:
function convertPlateYearToYYYY($vrmYear) {
$firstDigit = $vrmYear[0];
$secondDigit = $vrmYear[1];
if (6 == $firstDigit) {
$partOne = '1';
} else {
$partOne = '0';
}
$date = "20{$partOne}{$secondDigit}";
return $date;
}
$vrmYear = '05';
echo convertPlateYearToYYYY($vrmYear);
答案 1 :(得分:1)
您当前的做法是错误的,因为它将板块年度的第二个6个月视为明确的特殊情况。实际上,在当前的英国系统中,可以使用简单的数学运算来计算整个有效板的范围,而无需专门处理前导数字。
function convert_uk_reg_year_to_yyyy($year)
{
// Normalise year to padded with 1 leading zero, if necessary. This ensures that
// if the input is int(9) instead of string(2) "09" then it will still work as
// expected.
$year = str_pad((int)$year, 2, 0, STR_PAD_LEFT);
// Make sure input is within valid range
if ($year < 0 || $year > 99) {
return false;
}
// Create result
return "20" . ($year[0] % 5) . $year[1];
}
这使用模数运算符来计算出&#34;数&#34;组件,然后简单地使用输入的第二个数字作为&#34;单位&#34;成分
这将适用于当前系统容量结束时的每个平板年份(假设我们继续使用该系统直到2049年,当平板耗尽时)。
PS。是的我生活在英国并且知道车牌系统是如何运作的。当你开始想要处理旧式的前导α板或更老的尾随-α板时,它会变得更有趣,因为它们在循环之间的边界方面更加无序。
不幸的是,这仍然是不完美的,因为IIRC新系统实际上是用50板而不是00来实现的,但这可能是特殊的。我不确定是否有任何与现行系统匹配的个人牌照在它生效之前发行,因此匹配牌照模式并不是一个真正有效的解决方案,特别是考虑到牌照可以在车辆之间转移。如果您正在构建需要准确知道该板当前所连接的汽车年份的东西,那么您需要使用来自DVLA的数据(谁有这种东西的API)。
答案 2 :(得分:0)
我修复了丢失的分号并返回$ date,它似乎按预期工作
<?php
function convertPlateYearToYYYY($vrmYear) {
$firstDigit = substr($vrmYear, 0, 1);
$secondDigit = substr($vrmYear, 1, 1);
if ($firstDigit == 6) {
$partOne = '1';
} else {
$partOne = '0';
}
$date = "20" . $partOne . $secondDigit;
return $date;
}
$vrmYear = '05';
echo convertPlateYearToYYYY($vrmYear);
?>