ユーザーが日付を選択できるようにする必要がありますが、ユーザーが正確な日または月を知らず、年を知らない場合があります。
それぞれにオプションのアイテムを含むドロップダウンリストを備えたセレクターを作成し、それをDateTime
プロパティに保持することを考えています。しかし、不明な部分の値を指定する方法がわかりません。
日、月、年に別々int?
のフィールドを使用できますが、もっと良い方法があるかどうか疑問に思っています。
何か案は?
ユーザーが日付を選択できるようにする必要がありますが、ユーザーが正確な日または月を知らず、年を知らない場合があります。
それぞれにオプションのアイテムを含むドロップダウンリストを備えたセレクターを作成し、それをDateTime
プロパティに保持することを考えています。しかし、不明な部分の値を指定する方法がわかりません。
日、月、年に別々int?
のフィールドを使用できますが、もっと良い方法があるかどうか疑問に思っています。
何か案は?
DateTime は有効な日付でなければならないため、年だけを入れることはできません。少なくとも日と月も必要です。日付 01/01/2012 と年 2012 を区別できないため、これは問題です。日と月も持っていない限り、DateTime 内に値を保持する方法がわかりません。
ここでの最善の解決策は、あなたが言ったように、これらの値を int に保持し、未指定のフィールドに値 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]{};
}
ユーザー インターフェースで、単一の日付の代わりに日付範囲を使用できますか?
年しか分からない場合は、その年の 1/1 から 12/31 までの範囲を選択します。いずれにせよ、無効/部分的な日付ではなく、完全な日付を選択することをお勧めします。
はい、別々のフィールドを使用してください。mdl で select month,1,2,3... 12 の値を持ち、ddl で select date 1,2,3...31 を指定します。年を選択しないでください。むしろ、今年のような理想的な値を選択してください
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) を使用できます
ここでは、ユーザー入力が 2012-01-01 のように固定の日付になるため、userDate のような文字列の代わりに dateDatime を使用しないでください。その場合年のみは使えません