Javascript 如何找到两个日期之间的确切月份和日期-angularjs
我想计算两个日期之间的月份和天数。然后需要计算用户在开始日期和结束日期之间要支付的成本 成本=10000.00; 周期性=3(四分之一) 月份和天数=(开始日期-结束日期) 需要支付的款项=((月天数/周期)*成本) 我试着找出两个日期之间的时差,但它对我来说不起作用。有人能帮我吗Javascript 如何找到两个日期之间的确切月份和日期-angularjs,javascript,angularjs,Javascript,Angularjs,我想计算两个日期之间的月份和天数。然后需要计算用户在开始日期和结束日期之间要支付的成本 成本=10000.00; 周期性=3(四分之一) 月份和天数=(开始日期-结束日期) 需要支付的款项=((月天数/周期)*成本) 我试着找出两个日期之间的时差,但它对我来说不起作用。有人能帮我吗 var date = "2017-06-01"; console.log("date: "+date); var currentDate = $filter('date
var date = "2017-06-01";
console.log("date: "+date);
var currentDate = $filter('date')(date, "yyyy-MM-dd HH:mm:ss");
$scope.userdob = "2017-08-31";
var dobdate = $filter('date')($scope.userdob, "yyyy-MM-dd HH:mm:ss");
console.log("dob: "+dobdate);
/* differentiate Date */
var date1 = $filter('date')($scope.userdob, "yyyy-MM-dd");
var date2 = $filter('date')(date, "yyyy-MM-dd");
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]);
if (date1 < date2)
{
var start_date = date1;
var end_date = date2;
var inverse = false;
end_date = new Date(end_date); //If you don't do this, the original date passed will be changed. Dates are mutable objects.
end_date.setDate(end_date.getDate() + 1);
// Calculate the differences between the start and end dates
var yearsDifference = end_date.getFullYear() - start_date.getFullYear();
var monthsDifference = end_date.getMonth() - start_date.getMonth();
var daysDifference = end_date.getDate() - start_date.getDate();
var d1 = new Date(end_date.getFullYear(), end_date.getMonth(), 0);
var noOfDays = d1.getDate();
$scope.noOfMonths = (inverse ? -1 : 1) * (yearsDifference * 12 + monthsDifference + daysDifference/noOfDays); // Add fractional month
var date=“2017-06-01”;
控制台日志(“日期:+日期);
var currentDate=$filter('date')(日期,“yyyy-MM-dd HH:MM:ss”);
$scope.userdob=“2017-08-31”;
变量dobdate=$filter('date')($scope.userdob,“yyyy-MM-dd HH:MM:ss”);
控制台日志(“dob:+dobdate”);
/*日期*/
var date1=$filter('date')($scope.userdob,“yyyy-MM-dd”);
var date2=$filter('date')(日期,“yyyy-MM-dd”);
date1=date1.split('-');
date2=date2.split('-');
//现在我们将数组转换为Date对象,它有几个有用的方法
date1=新日期(date1[0],date1[1],date1[2]);
date2=新日期(date2[0],date2[1],date2[2]);
如果(日期1<日期2)
{
var start_date=date1;
var end_date=日期2;
var逆=假;
end_date=new date(end_date);//如果不这样做,传递的原始日期将被更改。日期是可变对象。
end_date.setDate(end_date.getDate()+1);
//计算开始日期和结束日期之间的差异
var yearsDifference=end_date.getFullYear()-start_date.getFullYear();
var monthsDifference=end_date.getMonth()-start_date.getMonth();
var daysDifference=end_date.getDate()-start_date.getDate();
var d1=新日期(end_Date.getFullYear(),end_Date.getMonth(),0);
var noOfDays=d1.getDate();
$scope.noOfMonths=(逆-1:1)*(年差*12+月差+日差/noOfDays);//添加分数月
众所周知,日期操作非常棘手。会发生闰年、闰秒和其他各种形式的时间调整。对于一个大的但远没有详尽的列表,请签出和删除。当对日期和时间做一些不寻常的事情时,最好使用一个好的库,例如。它不会让所有事情都正确,当然,但在大多数情况下,它都能做得很好
它还可以为您处理解析,因此前面的代码可以变成这样:
const date1 = moment($filter('date')($scope.userdob, "yyyy-MM-dd"));
const date2 = moment($filter('date')(date, "yyyy-MM-dd"));
const diffInMonths = date1.diff(date1, 'months');
const diffInDays = date1.diff(date2, 'days');
这解决了我的问题
$scope.startDate = new Date(startDate);
$scope.endDate = new Date(endDate);
console.log($scope.startDate);
console.log($scope.endDate);
/* differentiate Date */
var date1 = $filter('date')($scope.startDate, "yyyy-MM-dd");
var date2 = $filter('date')($scope.endDate, "yyyy-MM-dd");
console.log("date1 : "+date1);
console.log("date2 : "+date2);
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]);*/
console.log("date1 : "+date1);
console.log("date2 : "+date2);
if ($scope.startDate < $scope.endDate)
{
var start_date = date1;
var end_date = date2;
var inverse = false;
console.log("end_date : "+end_date);
end_date = new Date(end_date); //If you don't do this, the original date passed will be changed. Dates are mutable objects.
console.log("end_date : "+end_date); end_date.setDate(end_date.getDate() + 1);
start_date = new Date(start_date);
// Calculate the differences between the start and end dates
var yearsDifference = end_date.getFullYear() - start_date.getFullYear();
var monthsDifference = end_date.getMonth() - start_date.getMonth();
var daysDifference = end_date.getDate() - start_date.getDate();
var d1 = new Date(end_date.getFullYear(), end_date.getMonth(), 0);
var noOfDays = d1.getDate();
if(noOfDays >= 30) {
noOfDays = 30;
}
var days = daysDifference/noOfDays;
console.log(days);
$scope.noOfMonths = (inverse ? -1 : 1) * (yearsDifference * 12 + monthsDifference + days); // Add fractional month
console.log($scope.noOfMonths);
$scope.startDate=新日期(startDate);
$scope.endDate=新日期(endDate);
console.log($scope.startDate);
log($scope.endDate);
/*日期*/
var date1=$filter('date')($scope.startDate,“yyyy-MM-dd”);
var date2=$filter('date')($scope.endDate,“yyyy-MM-dd”);
console.log(“date1:+date1”);
console.log(“date2:+date2”);
date1=date1.split('-');
date2=date2.split('-');
//现在我们将数组转换为Date对象,它有几个有用的方法
/*date1=新日期(date1[0],date1[1],date1[2]);
date2=新日期(date2[0],date2[1],date2[2])*/
console.log(“date1:+date1”);
console.log(“date2:+date2”);
如果($scope.startDate<$scope.endDate)
{
var start_date=date1;
var end_date=日期2;
var逆=假;
控制台日志(“结束日期:+结束日期”);
end_date=new date(end_date);//如果不这样做,传递的原始日期将被更改。日期是可变对象。
console.log(“end_date:+end_date”);end_date.setDate(end_date.getDate()+1);
开始日期=新日期(开始日期);
//计算开始日期和结束日期之间的差异
var yearsDifference=end_date.getFullYear()-start_date.getFullYear();
var monthsDifference=end_date.getMonth()-start_date.getMonth();
var daysDifference=end_date.getDate()-start_date.getDate();
var d1=新日期(end_Date.getFullYear(),end_Date.getMonth(),0);
var noOfDays=d1.getDate();
如果(中午>=30){
中午=30天;
}
变量天数=日差/无天数;
控制台日志(天);
$scope.noOfMonths=(逆-1:1)*(年差异*12+月差异+天);//添加分数月
console.log($scope.noOfMonths);
你所说的月是什么意思?整整30天?玩弄日期是一件痛苦的事,我的建议是看看这样的东西-虽然这不能回答你的问题,但这个库为我节省了大量时间:)它将分解实际的日历月和闰年等谢谢你的建议。谢谢你的建议N
$scope.startDate = new Date(startDate);
$scope.endDate = new Date(endDate);
console.log($scope.startDate);
console.log($scope.endDate);
/* differentiate Date */
var date1 = $filter('date')($scope.startDate, "yyyy-MM-dd");
var date2 = $filter('date')($scope.endDate, "yyyy-MM-dd");
console.log("date1 : "+date1);
console.log("date2 : "+date2);
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]);*/
console.log("date1 : "+date1);
console.log("date2 : "+date2);
if ($scope.startDate < $scope.endDate)
{
var start_date = date1;
var end_date = date2;
var inverse = false;
console.log("end_date : "+end_date);
end_date = new Date(end_date); //If you don't do this, the original date passed will be changed. Dates are mutable objects.
console.log("end_date : "+end_date); end_date.setDate(end_date.getDate() + 1);
start_date = new Date(start_date);
// Calculate the differences between the start and end dates
var yearsDifference = end_date.getFullYear() - start_date.getFullYear();
var monthsDifference = end_date.getMonth() - start_date.getMonth();
var daysDifference = end_date.getDate() - start_date.getDate();
var d1 = new Date(end_date.getFullYear(), end_date.getMonth(), 0);
var noOfDays = d1.getDate();
if(noOfDays >= 30) {
noOfDays = 30;
}
var days = daysDifference/noOfDays;
console.log(days);
$scope.noOfMonths = (inverse ? -1 : 1) * (yearsDifference * 12 + monthsDifference + days); // Add fractional month
console.log($scope.noOfMonths);