我有一堆生日,以DDMMMYY格式存储。我需要将这些转换为日期值,因此我可以将它们存储在数据库中。
有没有简单的方法告诉strtotime函数,日期必须在过去?
<?php
$datestring = '22SEP41';
echo date('Y-m-d',strtotime($datestring)); //outputs 2041-09-22, should be 1941-09-22
?>
答案 0 :(得分:1)
<?php
$datestring = '22SEP41';
$matches = [];
preg_match('/([0-9]{2})([A-Z]{3})([0-9]{2})/', $datestring, $matches);
$prefix = ($matches[3] <= date('y') ? '20' : '19');
$matches[3] = "{$prefix}{$matches[3]}";
$ts = strtotime("{$matches[1]} {$matches[2]} {$matches[3]}");
// date ('Y-m-d', $ts) == 1941-09-22
这假设22SEP06应该被解释为2006而不是1906 - 基本上它给出了输出范围1917 - > 2016。
答案 1 :(得分:1)
只有当标准评估日期在今天之后时,此方法才会创建上个世纪的日期:
$date = date_create( $datestring );
if( $date->diff( date_create() )->invert )
{
$date->modify( '-100 years' );
}
echo $date->format( 'Y-m-d' );
有关
$datestring = '22SEP41';
输出是:
1941-09-22
有关
$datestring = '22SEP01';
输出是:
2001-09-22
的 eval.in demo 强>
基本上,我们根据给定的字符串创建一个DateTime,然后我们计算与当天的差异;如果差异为负(->invert
),我们会从日期减去1世纪。
您可以使用->format('%R%Y')
代替->invert
来个性化条件。在这个例子中:
if( $date->diff( date_create() )->format('%R%Y') < 10 )
从00
到05
的日期评估为2000-2005
。
答案 2 :(得分:0)
您可以尝试以下方式:
dijit.form.Select
我在我的本地机器上进行了测试,但它确实有效。希望它有效并且是您正在寻找的东西:)