字符串到时间返回空
String to time returning empty
我有一个函数可以去除用户日期输入中的斜杠,使其成为 ddmmYYYY
格式。
function mydate($input)
{
$sanitized = preg_replace("/[^0-9A-Za-z\:\- ]/", "", $input);
return $sanitized;
}
我有另一个函数可以检查日期是否在那个日期之前
function datebefore($before,$after)
{
$before = substr($before,2,2)."-".substr($before,0,2)."-".substr($before,4,4);
$after = substr($after,2,2)."-".substr($after,0,2)."-".substr($after,4,4);
return strtotime($after)." > ".strtotime($before) ;
/* if(strtotime($after) < strtotime($before) )
{
return "The start date is after the end";
} */
}
我遇到的问题是,当之前或之后的日期比当前日期早 1 天以上时,它 returns 是一个空字符串而不是时间戳
因为strtotime不接受你的时间字符串格式,所以return错误。
您可以使用DateTime::createFromFormat替换strtotime来创建日期时间,然后使用运算符>进行比较。
如:
var_dump(DateTime::createFromFormat('dmY', '11012017'));
strtotime
取决于分隔符来决定您使用的日期格式。
如果分隔符为 -
,则采用合理的日期格式 dd/mm/yyyy
,如果为 /
,则采用美国日期格式 mm-dd-yyyy
。
所以你的问题是你使用的分隔符。把格式改成dd-mm-yyyy
,把你的d,m,y值重新排列一下就好了
function datebefore($start,$end)
{
$s = sprintf('%s-%s-%s', substr($start,0,2), substr($start,2,2), substr($start,4,4));
$e = sprintf('%s-%s-%s', substr($end,0,2), substr($end,2,2), substr($end,4,4));
return strtotime($s) > strtotime($e)
? 'The start date is after the end'
: 'The start date is before the end';
}
function mydate($input)
{
$sanitized = preg_replace("/[^0-9A-Za-z\:\- ]/", "", $input);
return $sanitized;
}
$s = mydate('10/12/2016');
echo $s . PHP_EOL;
$e = mydate('06/12/2016');
echo $e . PHP_EOL;
$c = datebefore($s, $e);
echo $c;
我有一个函数可以去除用户日期输入中的斜杠,使其成为 ddmmYYYY
格式。
function mydate($input)
{
$sanitized = preg_replace("/[^0-9A-Za-z\:\- ]/", "", $input);
return $sanitized;
}
我有另一个函数可以检查日期是否在那个日期之前
function datebefore($before,$after)
{
$before = substr($before,2,2)."-".substr($before,0,2)."-".substr($before,4,4);
$after = substr($after,2,2)."-".substr($after,0,2)."-".substr($after,4,4);
return strtotime($after)." > ".strtotime($before) ;
/* if(strtotime($after) < strtotime($before) )
{
return "The start date is after the end";
} */
}
我遇到的问题是,当之前或之后的日期比当前日期早 1 天以上时,它 returns 是一个空字符串而不是时间戳
因为strtotime不接受你的时间字符串格式,所以return错误。
您可以使用DateTime::createFromFormat替换strtotime来创建日期时间,然后使用运算符>进行比较。
如:
var_dump(DateTime::createFromFormat('dmY', '11012017'));
strtotime
取决于分隔符来决定您使用的日期格式。
如果分隔符为 -
,则采用合理的日期格式 dd/mm/yyyy
,如果为 /
,则采用美国日期格式 mm-dd-yyyy
。
所以你的问题是你使用的分隔符。把格式改成dd-mm-yyyy
,把你的d,m,y值重新排列一下就好了
function datebefore($start,$end)
{
$s = sprintf('%s-%s-%s', substr($start,0,2), substr($start,2,2), substr($start,4,4));
$e = sprintf('%s-%s-%s', substr($end,0,2), substr($end,2,2), substr($end,4,4));
return strtotime($s) > strtotime($e)
? 'The start date is after the end'
: 'The start date is before the end';
}
function mydate($input)
{
$sanitized = preg_replace("/[^0-9A-Za-z\:\- ]/", "", $input);
return $sanitized;
}
$s = mydate('10/12/2016');
echo $s . PHP_EOL;
$e = mydate('06/12/2016');
echo $e . PHP_EOL;
$c = datebefore($s, $e);
echo $c;