如何查找两个日期之间的确切月份和日期 - angularjs
我想计算两个日期之间的月份和日期。然后需要计算用户在开始日期和结束日期之间支付的费用。如何查找两个日期之间的确切月份和日期 - angularjs
成本= 10000.00; Periodicity = 3(Quaterly);
月份和天数=(开始日期 - 结束日期);
付款需要支付=(((月和日/周期数)*费用);
我试图找到两个日期之间的时间差,但它不适合我。谁能帮我?
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
日期操作是非常棘手的,以得到正确的。有闰年,闰秒和其他各种形式的时间调整发生。对于一个很大,但没有详尽无遗的清单,结帐Falsehoods programmers believe about time和More falsehoods programmers believe about time。在做日期和时间不平凡的事情时,最好的办法是使用一个好的图书馆,如moment。当然,它不会得到任何正确的结果,但对于大多数目的而言,它会做足够好的工作。
它可以处理解析你一样,所以前面的代码可以成为这样的事情:
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');
谢谢你的建议。 – sudarsan
function findDateDifferenceInDays(sdate,edate) {
var oneDay = 24*60*60*1000;
var firstDate = new Date(sdate);
var secondDate = new Date(edate);
return Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
}
谢谢你的建议。 – sudarsan
这解决了我的问题。
$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);
你是什么意思一个月?整个30天的时间? –
玩日期是一种痛苦,我的建议是检查[momentjs](https://momentjs.com/)之类的东西 - 虽然这不能回答你的问题,但这个图书馆为我节省了大量的时间:)它会打破实际的日历月和闰年等 –