键入日期时在asp.net中的日历问题

时间:2017-05-17 06:33:48

标签: c# asp.net calendar

  

目前用户输入缩短版本(06/05/17)时   自动默认为(06/05/0017)而不是按日历选择它。

应该是06/05/2017 如果用户写的06/05/87应该是06/05/2087

<asp:TextBox ID="txtFromDate" runat="server" MaxLength="10" placeholder="DD/MM/YYYY" CssClass="form-control"></asp:TextBox>
<span class="input-group-addon calendar-icon" id="FromCalSpan"><i class="fa fa-calendar">
</i></span>

2 个答案:

答案 0 :(得分:0)

如果您确定用户要输入2000以上的年份。您可以拆分字符串并将2000添加到最后一个拆分字符串

 private void txtFromDate_TextChanged(object sender, EventArgs e)
        {
            string[] words;
            if (txtFromDate.Text.Contains("/"))
            {
                words = txtFromDate.Text.Split("/");
            }

            words[2] = (int.Parse(words[2].ToString()) + 2000).ToString();

            txtFromDate.Text = words[0].ToString() + "/" + words[1].ToString() + "/" + words[2].ToString();
        }

我已经在代码隐藏中完成了,因为你没有提到过Webform或MVC。但是我强烈建议你使用javascript来解决这两个问题。

答案 1 :(得分:0)

您可以使用服务器端或客户端方法来解决2位数年份转换,如下所示,包括对日期长度进行简单检查:

<强>一个。服务器端

此方法利用System.Globalization命名空间中的Calendar类,它将日期输入转换为4位数年份。

protected void txtFromDate_TextChanged(object sender, EventArgs e)
{
    String date = txtFromDate.Text;
    String[] digits = date.Split('/');

    var culture = new CultureInfo(CultureInfo.CurrentCulture.Name);
    culture.Calendar.TwoDigitYearMax = 2099; // 4 digits range between 2000 & 2099

    int fourDigitYear = culture.Calendar.ToFourDigitYear(Convert.ToInt32(digits[2]));

    // uses 4 digit year if the text field has 10 characters (2 digits day, 2 digits month, 2 date separators & 4 digits year)
    if (date.Length == 10)
    {
        fourDigitYear = digits[2];
    }

    txtFromDate.Text = words[0].ToString() + "/" + words[1].ToString() + "/" + fourDigitYear;
}

<强>湾客户端

这种jQuery方法使用普通字符串连接和标准Date方法。请注意,JS中的month由索引0(1月)而不是1开始,因此需要在日期调整期间进行减法和添加过程。

<script type="text/javascript">
    $(document).ready(function () {
        $("<%= txtFromDate.ClientID %>").change(function () {
            var data = $(this).val();
            var len = data.length; // check if it's 2 digits or 4 digits year
            var day = data.substr(0, 2);
            var month = data.substr(3, 2) - 1;
            var year = 0;
            if (len == 8) {
                year = parseInt("20" + data.substr(6, 2));
            } else {
                year = parseInt(data.substr(6, 4));
            }

            var date = new Date(year, month, day);

            $(this).val(date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear());
        });
    });
</script>