设置日期无日期或月份

问题描述:

我需要用户能够选择一个日期,但可能发生的情况是用户不知道确切的日期或月份,而是年份。设置日期无日期或月份

我正在考虑创建一个选择器,每个选项都带有可选项目,并将其保存在DateTime属性中。但我不知道如何指定未知部分的值。

我可以使用单独的int?字段的日,月和年,但我想知道是否有更好的方法。

任何想法?

+2

WPF中,的WinForms和ASP.Net? –

+0

对不起,ASP.Net MVC3。我更新了标签。 – kerzek

+0

请更改您的问题。 – adatapost

DateTime必须是一个有效日期,所以你不能只把年份放在里面,你至少还需要一天一个月。这在您的情况下是有问题的,因为您无法区分2012年1月1日和2012年之间的日期。我没有看到如何在DateTime内保留值,除非您还有日期和月份。

这里的最佳解决方案就像你所说的那样,将这些值保留在整数中,并将值0置于未指定的字段中。

+0

使用int?也是一个完全可行的选择。 – Tipx

+0

对,我不知道这是一个实际的类型。 – VoidStar

在用户界面上,您可以使用日期范围而不是单个日期吗?

如果他们只知道年份,则选择一年中1/1至12/31的范围。无论哪种方式,选择一个完整的日期,而不是一个无效的/部分的日期是一个不错的主意。

是使用单独的字段。具有选定月份的值,在mdl中为1,2,3 ... 12,在ddl中选择日期为1,2,3 ... 31。没有在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(字符串)为你想要使用的目的

在这里记住,你不应该使用dateDatime,而不是像userDate这样的字符串,因为用户输入将变得像2012-01-01一个固定的日期。在这种情况下,你不能只使用一年

我建议你创建一个自定义类。

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; 
     } 
    } 
} 

试试这个在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]{}; 
} 

http://qnimate.com/guide-to-styling-html5-input-elements/