快速搜索没有返回任何符合我要求的结果,所以我来这里寻求你的帮助。
我正在制作格式化生日。问题是,使用只能输入一些(或没有)数据。它分别存储为日,月和年。
基本上,根据现有数据,将确定如何格式化日期并将其显示给用户。
我的方法是:
#prepare birthday
$bday = new DateTime();
$bday->setTimezone(new DateTimeZone('America/New_York'));
$bday->setDate($row->birth_year,$row->birth_month,$row->birth_day);
if($row->birth_month && $row->birth_year && $row->birth_day){
//Full birthday entered
$display_bday = $bday->format('F j, Y');
} elseif($row->birth_month && !$row->birth_year && !$row->birth_day){
//Only a month
$display_bday = $bday->format('F');
} elseif($row->birth_month && $row->birth_year && !$row->birth_day){
//Only Month and year
$display_bday = $bday->format('F, Y');
}
我想知道是否有更好的方法来完成这项任务。我想我认为必须有更好的方法。提前致谢。如果我需要澄清任何事情,请问问!
编辑:删除不必要的代码
答案 0 :(得分:0)
您的代码可能会输出无效日期,因为您在设置DateTime
对象时没有过滤输入。当$row->birth_day
等于0
时,DateTime
对象将移回上个月(上一个日期)。
所以,我建议考虑一下:
$display_bday = null;
if ($row->birth_month) {
if ($row->birth_year) {
if ($row->birth_day) {
// day, month, and year
$display_bday = date('F j, Y', strtotime("$row->birth_year-$row->birth_month-$row->birth_day"));
} else {
// month and year
$display_bday = date('F, Y', strtotime("$row->birth_year-$row->birth_month-01"));
}
} else {
if ($row->birth_day) {
// day and month
$display_bday = date('F j', strtotime("2016-$row->birth_month-$row->birth_day"));
} else {
// month only
$display_bday = date('F', strtotime("2016-$row->birth_month-01"));
}
}
}