PHP将数字字符串转换为日期

时间:2018-04-23 20:39:53

标签: php regex

我基本上是根据上传到我们系统的序列号来确定保修日期。

例如,序列号可能是这样的: def set_shader_bump_depth(shader, amount): bump2ds = mc.listConnections(shader, type = 'bump2d') # that's always list, so we loop over it for eachbump2d in bump2ds: print "editing", eachbump2d mc.setAttr(eachbump2d + ".bumpDepth", amount) 其中217A111111111的{​​{1}}是2017年的年份。然后第4位是1月至9月为1-9,然后10月为17的月份, 11月是217,12月是A

我基本上需要能够提取B并使其成为C17A = 2017-10-01

我知道我会使用正则表达式,但我不确定如何检查第4位数字是数字还是字母,如果是1712017-01-01或{{1}然后是十月,十一月或十二月,否则是1-9,然后是一月到九月。

提前谢谢你。

3 个答案:

答案 0 :(得分:2)

这应该有效:

$serialnr = '217A111111111';
$month = hexdec($serialnr[3]);
$date = new \DateTime('20' . $serialnr[1] . $serialnr[2] . '-' . $month . '-01');

Demo

答案 1 :(得分:1)

如果你知道你要找的东西总是在你的字符串中的4个位置,你可以这么简单:

hexdec(substr($str,3,1))

返回" 9" for" 9"," 10"为" a"," 11"为" b" ......等等。

知道号码,你可以获得你想要的月份。

答案 2 :(得分:0)

const input = '217A111111111';

const truncated = input.substr(1, 3)

let year = 2000+parseInt(truncated.substr(0, 2))
let month = parseInt('0x'+truncated.substr(2, 1)); // 0x prefix is for hexadecimal

console.log(year, month, new Date(`${year}-${month}-01`))