根据文本框值(而非DateTimes)计算时间,返回四分之一小时
本文关键字:返回 四分 一小时 时间 计算 而非 DateTimes 文本 | 更新日期: 2023-09-27 18:20:32
我有几个问题:
-我需要使用用户输入到两个文本框中的军事时间进行计算。返回时间应为2.25小时、2.75小时等,一直到一刻钟。
-我当前计算提供的返回在提交时返回了一个格式错误。
我有一个表格,我需要计算开始时间和结束时间之间的小时差,以军事(24小时)时间输入。员工的工资以一刻钟为单位,因此回报需要以小时为单位,一直到一刻钟(即4.25小时、4.75小时等)。
由于表单的格式,开始日期和开始时间以及结束日期和结束时间位于不同的文本框中。除此之外,并非所有浏览器都支持输入type="time",因此我无法使用它来简化计算,而是使用type="number"的文本框。
相关asp如下:
<label for="tbBeginningTime">beginning time</label>
<asp:TextBox runat="server" ID="tbBeginningTime" type="number" AllowNegatives="false" onblur="javascript:hoursCalc();"></asp:TextBox>
<label for="tbEndingTime">ending time</label>
<asp:TextBox runat="server" ID="tbEndingTime" type="number" AllowNegatives="false" onblur="javascript:hoursCalc();"></asp:TextBox>
<label for="tbTotalTime">total time</label>
<asp:TextBox runat="server" ID="tbTotalTime" type="number" ReadOnly="true" AllowNegatives="false"></asp:TextBox>
我使用Javascript执行了一个简单的计算来确定小时数,但我未能成功地将小数点分隔开并计算一刻钟(.25、.50、.75)。我曾尝试将模数中的小数点分隔开来,并尝试将它们拆分成一个数组,但这些都没有在tbTotalTime文本框中提供正确的返回。
相关的javascript如下
function hoursCalc () {
var startTime = document.getElementById('<%= tbBeginningTime.ClientID %>');
var endTime = document.getElementById('<%= tbEndingTime.ClientID %>');
var totalTime = document.getElementById('<%= tbTotalTime.ClientID %>');
var t1 = 0;
var t2 = 0;
if (startTime.value != "") t1 = startTime.value;
if (endTime.value != "") t2 = endTime.value;
if (endTime.value < startTime.value) t2 = parseInt(endTime.value) + 2400;
totalTime.value = parseInt((parseInt(t2) - parseInt(t1)) / 100);
}
这会计算小时数并将其放入tbTotalTime文本框中,但是,当我尝试使用参数化SQL插入语句提交表单时,我收到一个错误,说明"输入字符串的格式不正确。"
这是我正在使用的c#:
protected void btnSaveClick(object sender, EventArgs e)
{
string connstring = ConfigurationManager.ConnectionStrings["TimeHubDBCS"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connstring))
{
try
{
SqlCommand cmd = new SqlCommand("spInsertRequestCO", conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add("@BeginningTime", SqlDbType.Time).Value = DateTime.ParseExact(tbBeginningTime.Text, "HHmm", null).TimeOfDay;
cmd.Parameters.Add("@EndingTime", SqlDbType.Time).Value = DateTime.ParseExact(tbEndingTime.Text, "HHmm", null).TimeOfDay;
cmd.Parameters.Add("@TotalTime", SqlDbType.Int).Value = int.Parse(tbTotalTime.Text);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
SuccessMessage = "Request Saved Successfully";
DisplaySuccessDialog(null, null);
ConfigureButtons(null, null);
}
catch (Exception ex)
{
PopupTitle = "Save Error: ";
ErrorMessage = ex.Message;
DisplayErrorDialog(null, null);
}
}
}
我知道对于这样一个复杂的问题,我可能会得到一些反对票,但我不知所措。我愿意接受任何人的建议,以使这一过程更加顺利。
我收到一个错误,说明"输入字符串不正确总体安排"
出现此错误是因为您试图将某个值传递给某个方法,但传递的值与该方法所期望的值不同。
如果您在按钮点击代码中设置断点,您可以看到这一行中出现了错误。
cmd.Parameters.Add("@TotalTime", SqlDbType.Int).Value = int.Parse(tbTotalTime.Text);
您的错误具体出现在int.Parse(tbTotalTime.Text)
部分。int.Parse
函数需要一个可以转换为整数值的字符串(例如:"3")。但是,当您执行代码时,会得到一个空字符串,而int.Parse
无法将空字符串转换为有效的数值。
即使您的javascript正在为字段设置值,它在服务器代码中也不可用。这是因为视图状态。您需要禁用此字段的视图状态,这将解决您的问题。
<asp:TextBox runat="server" ID="tbTotalTime" type="number" EnableViewState="false"
AllowNegatives="false"></asp:TextBox>
更进一步,任何时候出现错误,都要尝试在代码中设置断点并进行调试。这将帮助您了解代码的哪一部分出现故障。您可以在调试时检查变量值等。