Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将本地JS转换为Angularjs以计算两个日期之间的天数?_Javascript_Angularjs - Fatal编程技术网

Javascript 将本地JS转换为Angularjs以计算两个日期之间的天数?

Javascript 将本地JS转换为Angularjs以计算两个日期之间的天数?,javascript,angularjs,Javascript,Angularjs,我在尝试转换或翻译原生js脚本以计算两个范围(“工作开始”和“工作结束”)中两个日期之间的天数时遇到困难,但没有成功 下面是代码,实际上它是有效的,但是在console.log中触发了一个警报,我没有实现解决这个问题 $scope.$watchGroup(['work_start', 'work_end'], function() { var date1 = $scope.work_start; var date2 = $scope.work_end; // First we split th

我在尝试转换或翻译原生js脚本以计算两个范围(“工作开始”和“工作结束”)中两个日期之间的天数时遇到困难,但没有成功

下面是代码,实际上它是有效的,但是在console.log中触发了一个警报,我没有实现解决这个问题

$scope.$watchGroup(['work_start', 'work_end'], function() {
var date1 = $scope.work_start;
var date2 = $scope.work_end;

// First we split the values to arrays date1[0] is the year, [1] the month and [2] the day
date1 = date1.split('-');
date2 = date2.split('-');

// Now we convert the array to a Date object, which has several helpful methods
date1 = new Date(date1[0], date1[1], date1[2]);
date2 = new Date(date2[0], date2[1], date2[2]);

// We use the getTime() method and get the unixtime (in milliseconds, but we want seconds, therefore we divide it through 1000)
date1_unixtime = parseInt(date1.getTime() / 1000);
date2_unixtime = parseInt(date2.getTime() / 1000);

// This is the calculated difference in seconds
var timeDifference = date2_unixtime - date1_unixtime;

// in Hours
var timeDifferenceInHours = timeDifference / 60 / 60;

// and finaly, in days :)
var timeDifferenceInDays = timeDifferenceInHours  / 24;

// alert(timeDifferenceInDays);
$scope.total_days = timeDifferenceInDays;
}))

这是我收到的警报:

angular.js:13283 TypeError: Cannot read property 'split' of null
at app.js:3997
at c (angular.js:16419)
at m.$eval (angular.js:16884)
at m.$digest (angular.js:16700)
at m.$apply (angular.js:16992)
at g (angular.js:11313)
at y (angular.js:11511)
at XMLHttpRequest.t.onload (angular.js:11452)(anonymous function) @ angular.js:13283(anonymous function) @ angular.js:9996m.$digest @ angular.js:16702m.$apply @ angular.js:16992g @ angular.js:11313y @ angular.js:11511t.onload @ angular.js:11452 
我改变了一些事情,但这是我能做到的。欢迎任何帮助

这意味着您试图在非字符串的对象上使用该函数。那么,您在哪里使用split函数呢

date1 = date1.split('-');
date2 = date2.split('-');
那么date1/2是在哪里定义的呢

var date1 = $scope.work_start;
var date2 = $scope.work_end;
那么
$scope.work\u start
/
end
在哪里定义?不确定,但可能是html格式的。要简单地解决此问题,请执行以下操作:

if(date1 === null || date2 === null){
  alert("no dates given")
} else {
  date1 = date1.split('-');
  date2 = date2.split('-');
  ... // rest of your code
}

根据下面的讨论更新此部分

在JS中可能是一种痛苦。新初始化的日期对象只是自1970年1月1日(UTC)以来的毫秒数。如果你想玩日期和时间,可以看看js库,它可以让日期更容易处理

监视这两个日期,如果其中一个发生更改,则运行“间隔天数”功能。这很好,但是您必须补偿一系列问题,例如

用户在
工作结束
之前更改
工作开始
工作开始
工作结束

用户输入的日期格式不正确

还有一大堆其他可能出现的东西。您可能需要考虑合并一个按钮,允许用户在编辑完这两个日期后更新日期。这还允许表单错误检查输入,如果格式不正确,则不允许提交

HTML


感谢“”用于getDaysBetween逻辑。

看起来好像不总是设置
work\u start
work\u end
。如果(!work_start | | | |!work_end){total_days=null;return;}可以添加一个简单的条件
,看看它是否有用。抱歉@Claies,此错误是由于来自另一个块的console.log引起的,该值尚未定义,这就是它未定义的原因。但这与上面粘贴的代码无关(两个日期之间的天数),还请注意,回调函数可以具有form
函数(newValues,oldValues,scope)
,因此您可以从
newValues
读取值,而不是从
newValues
读取值,例如
work_start=newValues[0];work\u end=newValues[1]
(我的意思是只需在函数中添加参数
newValue
)如果
$scope.work\u start
$scope.work\u end
的值是格式为“MM-dd-yyyy”的字符串格式的日期,则此代码可以正常工作。这个错误似乎是不言自明的;其中一个作用域属性是
null
。那么,这里的问题是什么?我解决了这个问题,考虑到空值,如果它们不存在,给它们一个0的值。这是一个暂时的解决方案,我将按照@Travis的建议进行处理,以生成一个更紧凑的代码,使用适当的角度标记。谢谢,这似乎暂时解决了问题,但我确实需要做的是与您建议的角度典型标记相同的事情。对于我在html中的输入,我有:
,最后:
值取自此处。很高兴提供帮助,如果我回答了您的问题,请确保单击检查。此外,如果您不知道,
Date
对象在js中是一个大麻烦-它们有一个陡峭的学习曲线。如果你在约会/时间上做了很多事情,那就去看看或者。此外,它看起来像一个侦听器,因此当其中一个值发生更改时,它将运行该函数。一个很好的方法,但是,再一次,约会可能是一个婊子。谢谢你,我会看看那些,(糖和时刻),顺便说一下,关于学习JS和Angular,我前面还有很长的路要走。我肯定会发布更多的问题和疑问!
if(date1 === null || date2 === null){
  alert("no dates given")
} else {
  date1 = date1.split('-');
  date2 = date2.split('-');
  ... // rest of your code
}
<div ng-controller="workCont">
  <input ng-model="$scope.work_start"></input>
  <input ng-model="$scope.work_end"></input>
  <button ng-click="$scope.getDaysBetween()">Get Days Between</button>
  <p>Days Between: {{$scope.daysBetween}}</p>
</div>
var workApp = angular.module('workApp', []);

workApp.controller('workCont', function workCont($scope) {
  $scope.work_start = new Date();
  $scope.work_end = new Date();
  $scope.daysBetween = 0;
  $scope.getDaysBetween = function(){
    var date1 = $scope.work_start
    var date2 = $scope.work_end
    var timeDiff = Math.abs(date2.getTime() - date1.getTime());
    var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
    $scope.daysBetween = diffDays
  }
});