【问题标题】:Populate date according to month and year selected in dropdown list根据下拉列表中选择的月份和年份填充日期
【发布时间】:2013-02-08 07:15:10
【问题描述】:

我有 3 个下拉列表,分别代表年、月和日期。 现在我想根据用户选择的年份和月份填充我的日期。我想使用普通的下拉列表尝试它,所以我暂时排除了日期时间选择器的选项。

这是我通常用来填充值的代码:

 protected void Call_Date()
{
    for (int i = 1; i <= 31; i++)
    {
        date0.Items.Add(i.ToString());

    }

    for (int j = 1; j <= 12; j++)
    {
        month0.Items.Add(j.ToString());

    }

    for (int k = DateTime.Now.Year; k <= 2020; k++)
    {
        year0.Items.Add(k.ToString());
    }
}

我该怎么做才能让它相应地工作?

【问题讨论】:

  • 闰年和天数不定的月份呢?在这种情况下您需要验证
  • 为什么不使用日期选择器?我的意思是它是为了这个特定目的而存在的。
  • 他们说你不应该为了节省宝贵的时间而两次发明轮子。如果已经有一个控件可以实际满足您的需要,那么您应该选择它。此外,克里斯所说的在这种情况下也很重要。
  • @Cris:是的。我也必须检查一下。
  • @Syrion 检查我作为答案发布的链接,它有您可能需要的示例代码

标签: c# asp.net date drop-down-menu


【解决方案1】:

试试这个;

DateTime myDate = new DateTime((int)year0.SelectedValue,(int)month0.SelectedValue,(int)date0.SelectedValue)  

但请记住,@Cris 提出了一个问题。

【讨论】:

    【解决方案2】:

    您可以使用DateTime.IsLeapYear 方法检查年份是否为闰年。如果你不想使用 DateTime 函数,那么你可以像this 一样计算闰年。一旦找到了,就很容易找到一个月中的天数。

    一月。 31, 2月28日/29日(闰年), 3月31日, 4月30日, 5月31日, 6月30日, 7月31日, 8月31日, 9月30日, 10 月 31 日, 11月30日, 12 月 31 日

    【讨论】:

    • 你也有DateTime.DaysInMonth 来获取日期:)\
    【解决方案3】:
    【解决方案4】:

    您应该利用框架的 DateTime 类从选定的年份和月份中获取您需要的日期。

        //build a date for the month and year selected by the user
        DateTime newDate = new DateTime(yearSelected, monthSelected, 1);
    
        //iterate through the days in that month
        for (int i = newDate.Day; i < DateTime.DaysInMonth(newDate.Year, newDate.Month); i++ )
        {
            //add to your list
        }
    

    【讨论】:

      【解决方案5】:

      不确定客户端解决方案是否可行,但看起来您可以使用 Knockout 作为一个选项...有点像这个例子:http://knockoutjs.com/examples/cartEditor.html,取决于第一个下拉菜单(月),您可以填充下一个(天)并使其与有效天数相匹配,这样您就可以生成有效日期...

      话虽如此,我最近为生日字段制作了一个编辑器模板...它与您的设置大致相同,具有三个下拉菜单。它还有一个隐藏字段(实际日期),该字段使用 Javascript 设置,每次三个下拉框之一更改时都会运行该字段。然后它会尝试设置隐藏字段的值并在该字段上运行不显眼验证以检查有效日期,如果不是则显示错误消息...

      检查编辑器模板中下拉菜单的伪代码在这里:

      $("Dropdown").change(function () {
       if (($("Year").val() != "") && ($("Day").val() != "") && ($("Month").val() != "")) {
         var date = new Date($("Year").val(), $("Month").val() - 1, $("Day").val())
          $("Hidden").val(date.toString("yyyy-MM-dd"));
      
          $('form').validate().element('Hidden');
        } else {
         $("Hidden").val("");
        }
      }
      })
      

      最后,正如 Cris 所说,您还需要检查日期是否有效,而不是 2 月 31 日。服务器端,我只会在日期上执行 Date.TryParse() 以检查它是否是实际日期,而不是表格发布时的什么......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-04
        • 2015-01-14
        • 2021-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多