日期/时间控制

本文关键字:控制 时间 日期 | 更新日期: 2023-09-27 17:52:38

我有一个webform应用程序,计算两个日期之间的时间差,然后以天数,总小时数,总分钟数的格式返回。

我的标记代码如下:
<asp:Label ID="Label20" runat="server" CssClass="label">Resolved Date</asp:Label>
<asp:TextBox ID="TextBox14" runat="server" CssClass="textbox"      TextMode="Date" OnTextChanged="TextBox14_TextChanged"></asp:TextBox>

现在ontextchanged事件将计算与另一个日期时间文本框的时间差。

我做过这样的事情:

protected void TextBox14_TextChanged(object sender, EventArgs e)
{
    // get date from first text box
    DateTime dold = Convert.ToDateTime(TextBox1.Text);
    DateTime dnew = Convert.ToDateTime(TextBox14.Text);
    TimeSpan daydif = (dnew - dold);
    double dayd = daydif.TotalDays;
    Label27.Text = dayd.ToString();
}

我的问题是,每当没有输出它?Label27没有天数差异值。

是否有其他我不知道的事件触发器?

谢谢你的帮助

日期/时间控制

我同意Jon Skeet的观点,我将为此目的使用日历控件,您将遇到文本字段的输入验证问题,而您正在处理的日历是Date对象。首先,您可以向页面添加日历字段。

<!-- Old Date -->
<asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
<!-- New Date -->
<asp:Calendar ID="Calendar2" OnSelectionChanged="TextBox14_TextChanged" runat="server"></asp:Calendar>

然后在你的onchanged方法中,你可以像这样在一行中计算时间跨度,当你可以像这样访问它时,创建另一个对象double来保存你的总天数没有意义。除非你要在很多地方使用它,否则最好创建一个double类型的类型

protected void TextBox14_TextChanged(object sender, EventArgs e)
    {
        //Might add some quick validation to make sure a date is selected in both calendars.
        // Not sure if you are subtracting old from new or new from old but you can sorta that out
        Label20.Text = ((TimeSpan)(Calendar2.SelectedDate - Calendar1.SelectedDate)).TotalDays.ToString();
    }

请记住,当调用onselection changed时,页面正在刷新,因为数据必须提交到页面,以便服务器端处理发生。Web页面事件不像winforms。