我需要用户能够选择日期,但可能会发生用户不知道确切的日期或月份,而是年份。
我正在考虑创建一个带有下拉列表的选择器,每个列表中都包含可选项,并将其保存在DateTime
属性中。但我不知道如何指定未知部分的值。
我可以为日,月和年使用单独的int?
字段,但我想知道是否有更好的方法。
有什么想法吗?
答案 0 :(得分:4)
日期时间必须是有效日期,因此您不能只将年份放入其中,您至少还需要日期和月份。这在您的情况下是有问题的,因为您无法区分日期01/01/2012和2012年。我不知道如何将值保留在DateTime中,除非您还有日期和月份。
这里最好的解决方案就是像你说的那样,将这些值保存在整数中,并将值0放在未指定的字段中。
答案 1 :(得分:0)
在用户界面上,您可以使用日期范围而不是单个日期吗?
如果他们只知道年份,那么选择该年度的1/1到12/31的范围。 无论哪种方式,最好选择一个完整的日期,而不是无效/部分日期。
答案 2 :(得分:0)
是使用单独的字段。将值设为选择月份,1,2,3 ... 12 in mdl,并选择日期1,2,3 ... 31 in ddl。在ydl没有选择年份。而是保留一些理想的价值,如当前年度选择
由ddl,mdl,ydl分别表示日,月,年的下拉列表名称
显示用户指南的标签,必须选择年份
可选(示例代码):
当用户提交时,为了检查月和日,您应该进行验证
string userDate = ""
if (ddl.SelectedIndex>0)
{ //then you can try to validate date as
try
{
string temp=ydl.SelectedItem.ToString()+"-"+ydl.SelectedItem.ToString();
temp += " "+ydl.SelectedItem.ToString()
DateTime dt=Convert.ToDateTime(temp);
userDate=dt.ToString("yyyy-MM-dd");
}
catch
{
//Display message on some label that chosen date is invalid
return;
}
}
else
{
userDate=ydl.SelectedItem.ToString();
if (mdl.SelectedIndex>0)
{
userDate += mdl.SelectedItem.ToString();
}
}
现在您可以将userDate(string)用于您想要使用的目的
请记住,您不应使用dateDatime而不是userDate之类的字符串,因为用户输入将变为2012-01-01固定日期。在这种情况下,您不能仅使用年份
答案 3 :(得分:0)
我建议你创建一个自定义类。
public class CustomDate
{
public int? Day { get; set; }
public int? Month { get; set; }
public int Year { get; set; }
public DateTime? Date
{
get
{
if(Year > 0 && Day.HasValue && Day.Value > 0
&& Month.HasValue && Month.Value > 0)
return new DateTime(Year, Month.Value, Day.Value);
return null;
}
}
}
答案 4 :(得分:0)
在css中试试这个
input[type=date] {
::-webkit-datetime-edit-month-field[disabled]{}
::-moz-datetime-edit-day-field[disabled]{};
::-ms-datetime-edit-day-field[disabled]{};
::-o-datetime-edit-day-field[disabled]{};
}