所以我在数据库中有一个列,用于将用户的工作持续时间记录为分钟。我试图获得这个价值,并将其转换为HH:mm到每周工作小时数,但我一直陷入困境。
<td><strong>{{ Math.floor(teamUniqueHoursTotalPerUser[entry] / 1000 / 60 / 60) + 'h ' + Math.round(teamUniqueHoursTotalPerUser[entry] / 1000 / 60 % 60) + 'm' }}</strong></td>
我在数学方面很糟糕,所以试图找到一种方法只使用数学库来做到这一点,所以我可以在我学习的同时学习。目前,当没有价值时,我得到一个NaN。我想要的是看到Total:0h 0m,当没有值时。
在控制器中:
$scope.teamTimeInfoForCurrentWeek = {};
if (data != null) {
var uniqueNamesArray = [];
var uniqueHoursWorkedCurrentWeekPerUser = {};
for (i = 0; i < data.length; i++) {
var newUser = 0;
data[i].Full_Name = data[i].Employee_Last_Name + ', ' + data[i].Employee_First_Name;
if (uniqueNamesArray.indexOf(data[i].Full_Name) == -1) {
uniqueNamesArray.push(data[i].Full_Name);
newUser = 1;
}
if (data[i].Hours_Worked !== null && data[i].Hours_Worked >= 0) {
data[i].Hours_Worked = moment.duration(data[i].Hours_Worked, 'minutes');
if (newUser == 1) {
uniqueHoursWorkedCurrentWeekPerUser[data[i].Full_Name] = moment.duration(data[i].Hours_Worked, 'minutes');
}
else {
uniqueHoursWorkedCurrentWeekPerUser[data[i].Full_Name] += moment.duration(data[i].Hours_Worked, 'minutes');
}
}
if (data[i].Lunch_Duration !== null && data[i].Lunch_Duration >= 0) {
data[i].Lunch_Duration = moment.duration(data[i].Lunch_Duration, 'minutes');
}
}
$scope.teamTimeInfoForCurrentWeek = data;
$scope.teamHoursWorkedForCurrentWeek = uniqueHoursWorkedCurrentWeekPerUser;
$scope.teamNameInfoForCurrentWeek = uniqueNamesArray;
我尝试过整合时刻,但是当我尝试创建一个时刻(分钟值,&#39;分钟&#39;)时,似乎在处理超过24小时的值时遇到问题。
感谢任何帮助。 Javascript还不是我的一杯茶。
答案 0 :(得分:4)
如果没有值,则为undefined
。对某些undefined
应用数学运算时,会得到NaN
(非数字)。因此,无论何时应用数学运算符,您要做的是确保任何可能变为undefined
的变量都会产生0
。您可以使用||
运算符进行内联。
像这样:
Math.floor((teamUniqueHoursTotalPerUser[entry] || 0) / 1000 / 60 / 60)
答案 1 :(得分:0)
当您尝试在不强制输入数字的事物上使用数学运算符时,会得到NaN
。我在代码中的任何地方都看不到teamUniqueHoursTotalPerUser
,但我猜错teamUniqueHoursTotalPerUser[entry]
正在回复undefined
。 undefined
除以任何内容会给您NaN
。
答案 2 :(得分:0)
您可以在循环时默认变量。 看看如果缺少员工名字的模式,我将删除逗号。
同样,如果缺少Hours_Worked,那么我默认为0
for (i = 0; i < data.length; i++) {
var newUser = 0;
data[i].Full_Name = (data[i].Employee_Last_Name || '') + (data[i].Employee_First_Name ? ', ' + data[i].Employee_First_Name : '');
data[i].Hours_Worked = data[i].Hours_Worked || 0;
...
...
}
答案 3 :(得分:0)
在转换为数字时,NaN
可能会导致值产生的情况很多。根据以下文档,可以在https://www.w3schools.com/jsref/jsref_isnan.asp
teamUniqueHoursTotalPerUser[entry]
的示例案例
isNaN(123)// false
isNaN(-1.23)// false
isNaN(5-2)// false
isNaN(0)// false
isNaN('123')// false
isNaN('Hello')// true
isNaN('2005/12/12')// true
isNaN('')// false
isNaN(true)// false
isNaN(未定义)// true
isNaN('NaN')// true
isNaN(NaN)// true
isNaN(0/0)// true
在转换为值def on_drawing_area_draw(self,widget,cr):
global dimg
mymutex.acquire()
Gdk.cairo_set_source_pixbuf(cr, dimg.copy(), 0, 0)
cr.paint()
mymutex.release()
的数字之前,您只需要处理您的案例。