寻找使用 Javascript 从 Kendo UI 时间选择器中减去时间的更好替代方法
Looking for a better alternative for using Javascript to subtract time from Kendo UI timepickers
我目前有一个 Asp.net MVC 4 应用程序,它有一个时间输入屏幕。在这个屏幕上,我使用了一些不同的 Kendo 控件和 Razor Html 助手,例如:
@(Html.Kendo().TimePickerFor(m => m.StartTime).Name("startTime"))
我对 endTime 也有同样的看法。现在我有一些 Javascript 可以正确处理我想要的结果,虽然四舍五入可能会更好,但它很混乱,我相信有更好的方法来处理它。该代码看起来像这样:
function change() {
var startTime = $("#startTime").val()
var endTime = $("#endTime").val()
var start = "01/01/2015 " + startTime
var end = "01/01/2015 " + endTime
var timeDiff = Math.abs(new Date(end) - new Date(start));
var d = timeDiff / 1000 / 60 / 60
var diffM = d * 2
var diffR = Math.ceil(diffM)
var diff = diffR / 2
$('#HoursWorked').val(diff)
$('#TotalBillTime').val(diff)
}
我想要的结果是从 StartTime 中减去 EndTime,并将差值转换和四舍五入以显示为以小时为单位的 HoursWorked 计数。现在它需要几个小时和半小时。有没有办法避免所有这些额外的代码?另外,从数学上讲,有没有办法更精确地四舍五入或包括小时、半小时和刻钟?
如果这是一个不好的问题,我深表歉意,我是新手 Javascript,不熟悉许多其他库或对象。
查看 Moment.js
function change() {
var startTime = $("#startTime").val()
var endTime = $("#endTime").val()
var start = "01/01/2015 " + startTime
var end = "01/01/2015 " + endTime
var timeDiff = moment(end) - moment(start);
var diff = moment.duration(timeDiff).asHours();
$('#HoursWorked').val(diff)
$('#TotalBillTime').val(diff)
}
编辑
抱歉,这没有回答您关于以完整、一半和四分之一增量表示小时数的问题。为此,您仍然需要使用一些数学知识。您需要的公式是:
Math.ceil(hours * 4) / 4
例如:
> Math.ceil(1.053 * 4) / 4
1.25
> Math.ceil(1.50001 * 4) / 4
1.75
> Math.ceil(1.4999 * 4) / 4
1.5
所以回到这个例子:
var diff = moment.duration(timeDiff).asHours();
var roundedDiff = Math.ceil(diff * 4) / 4;
首先,JavaScript 的日期功能严重缺乏。太荒谬了。
其次,有几个很酷的框架可以让它变得更好。
倒计时可让您轻松表示两个日期之间的差异。
http://countdownjs.org/
Moment.js 使整体日期处理变得更好。
http://momentjs.com/
我目前有一个 Asp.net MVC 4 应用程序,它有一个时间输入屏幕。在这个屏幕上,我使用了一些不同的 Kendo 控件和 Razor Html 助手,例如:
@(Html.Kendo().TimePickerFor(m => m.StartTime).Name("startTime"))
我对 endTime 也有同样的看法。现在我有一些 Javascript 可以正确处理我想要的结果,虽然四舍五入可能会更好,但它很混乱,我相信有更好的方法来处理它。该代码看起来像这样:
function change() {
var startTime = $("#startTime").val()
var endTime = $("#endTime").val()
var start = "01/01/2015 " + startTime
var end = "01/01/2015 " + endTime
var timeDiff = Math.abs(new Date(end) - new Date(start));
var d = timeDiff / 1000 / 60 / 60
var diffM = d * 2
var diffR = Math.ceil(diffM)
var diff = diffR / 2
$('#HoursWorked').val(diff)
$('#TotalBillTime').val(diff)
}
我想要的结果是从 StartTime 中减去 EndTime,并将差值转换和四舍五入以显示为以小时为单位的 HoursWorked 计数。现在它需要几个小时和半小时。有没有办法避免所有这些额外的代码?另外,从数学上讲,有没有办法更精确地四舍五入或包括小时、半小时和刻钟?
如果这是一个不好的问题,我深表歉意,我是新手 Javascript,不熟悉许多其他库或对象。
查看 Moment.js
function change() {
var startTime = $("#startTime").val()
var endTime = $("#endTime").val()
var start = "01/01/2015 " + startTime
var end = "01/01/2015 " + endTime
var timeDiff = moment(end) - moment(start);
var diff = moment.duration(timeDiff).asHours();
$('#HoursWorked').val(diff)
$('#TotalBillTime').val(diff)
}
编辑
抱歉,这没有回答您关于以完整、一半和四分之一增量表示小时数的问题。为此,您仍然需要使用一些数学知识。您需要的公式是:
Math.ceil(hours * 4) / 4
例如:
> Math.ceil(1.053 * 4) / 4
1.25
> Math.ceil(1.50001 * 4) / 4
1.75
> Math.ceil(1.4999 * 4) / 4
1.5
所以回到这个例子:
var diff = moment.duration(timeDiff).asHours();
var roundedDiff = Math.ceil(diff * 4) / 4;
首先,JavaScript 的日期功能严重缺乏。太荒谬了。
其次,有几个很酷的框架可以让它变得更好。
倒计时可让您轻松表示两个日期之间的差异。 http://countdownjs.org/
Moment.js 使整体日期处理变得更好。 http://momentjs.com/