AngularJS:带日期的输入字段

时间:2015-05-20 17:50:17

标签: javascript angularjs

我想,这是一些初学者的问题,但我不知道要搜索什么。

我的时间表应如下所示:

    From  |  To   | Pause | Hours 
   [08:00] [17:30] [01:00]  08:30 

括号内的值(08:00,17:30,01:00)是输入字段,小时数应为计算值。

所以这是我的表格:

<div ng-repeat="t in timesheetCurrentMonth">
    From: <input type="text" ng-model="t.from"/> <!-- e.g. 08:00 -->
    To:   <input type="text" ng-model="t.to"/>   <!-- e.g. 17:30 -->
    Pause:<input type="text" ng-model="t.pause"/><!-- e.g. 01:00 -->

    Working hours:<span>{{t.to-t.from-t.pause|hhmm}}</span> <!-- e.g. 08:30   --> 
</div>

那么如何在像&#39; 08:30&#39;等文本字段中输入日期值?并计算总工时?

我正在考虑在模型中使用分钟值(08:00 = 480)进行计算,因为我会将这些数据作为分钟值保存在数据库中,并使计算变得简单(从暂停开始)。那有意义吗?顺便说一句,我有一个过滤器,它将分钟值转换为HH:mm格式。

谢谢, 哈德

PS:这是一个将分钟(如480)转换为HH:MM字符串(08:00)的函数。

var convertToHourString = function(min, alwaysShowMinutes) {
     var hours = Math.floor(min / 60); 
     var minutes = min % 60;
     if (minutes === 0 && !alwaysShowMinutes)
         return hours;
     return hours + ":" + (minutes < 10 ? "0" + minutes : minutes);
};

3 个答案:

答案 0 :(得分:3)

momentJs提供您需要的所有日期/时间操作和转换。

答案 1 :(得分:1)

我会在你的控制器里面做一个计算属性的数学运算。在进行数学运算之前,您需要使用传入的字符串创建一个新的Date()。

以下是一个简单示例:https://jsfiddle.net/khpfvo1u/

var start = new Date('2015-05-20 08:30:00');
var end = new Date('2015-05-20 15:30:00');

var result = (end - start) / 1000 / 60 / 60;
alert(result);
像迈克尔说的那样,momentJS将为你提供更丰富的功能,与日期有关。如果你有非常简单的数学,那么可能值得引入依赖。

答案 2 :(得分:0)

好的,我自己发现了它。

这就是问题所在。 “那么如何计算总工作时间?”

<span>{{calcWorkingHours(t.to, t.from, t.pause)|hhmm}}</span>

范围:从= 08:00到= 17:30,暂停= 01:00

因此变量to,from和pause将被转换为分钟值,工作时间将被计算(再次作为分钟值)并使用过滤器('hhmm')输出,这将转换为sth。比如510(分钟)进入'08:30'小时。