使用JS和moment操作日期/时间



我有两个日期,我需要使用这两个日期创建第三个日期。

if (document.getElementById("endDate"))
endDate = document.getElementById("endDate").value;
if (document.getElementById("presentDate"))
presentDate = document.getElementById("presentDate").value;

如果Present date = "12/5/2018"End date = "12/25/2018",那么我的New date = "12/26/2018";

由于JavaScript的日期月份从0-11不等,而且日期有点混乱,我没有得到想要的结果。

我尝试过的:

var presentDt = new Date(presentDate);
var endDt = new Date(endDate);
var newDay = endDt.getUTCDate()+1; 
var presentMonth = presentDt.getUTCMonth();
var presentYear = presentDt.getUTCFullYear();
var nextDate= presentMonth + '/' + endDay + '/' + presentYear;
  • 问题1:上面的代码有效,但如果我的endDate在31号,那么添加UTCDate+1会使其变为32号,这会返回无效日期。

  • 问题2:如果我执行UTCMonth(),它将返回11,但如果我想添加2个月,则它将返回13,这也是无效的。问题基本上是我无法随心所欲地操纵日期。

我也尝试了一下,但我遇到了类似的问题,我无法像我希望的那样轻松地操作日期。

也尝试了getDategetMonth,但效果相同。

有没有更好的方法用JavaScript处理整个日期/时间?

1:加/减天数:新日期(new Date((.setDate(new Date(.getDay((+3((

2:加/减月份:新日期(new Date((.setMonth(new Date(.getMonth((+3(

//your code
var presentDt = new Date(presentDate);
var endDt = new Date(endDate);
var newDay = new Date(new Date().setDate(endDt.getDay() + 2)); 
var presentMonth = presentDt.getUTCMonth();
var presentYear = presentDt.getUTCFullYear();

由于您的输入字符串不是new Date()在各种环境中都能识别的格式,因此我建议使用moment(String, String)来解析它。

然后,您可以使用moment(Object)、力矩设置器(如year()month()date()(和format()来获得所需的输出。

这里是一个活样本:

var presentDt = "12/5/2018";
var endDt = "12/25/2018";
// Parse your input with momentjs
var mPresent = moment(presentDt, "MM/DD/YYYY");
var mEnd = moment(endDt, "MM/DD/YYYY");
// Create a new momnt object compliant with your needs
var nextDate = moment({
year: mPresent.year(), // get presentDt's year
month: mPresent.month(), // get presentDt's month
date: mEnd.add(1, 'day').date() // get endDt day of the month and add 1 day to it
});
// Display the result in the format you need
console.log(nextDate.format("MM/DD/YYYY"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

请注意,当endDt表示一个月的最后一天时,您将得到01作为日结果。

这就是我所做的:

首先,我创建了以下函数来查看天数和月份。

function formattedDate(date) {
var day = date.getDate();
var monthIndex = date.getMonth();
var year = date.getFullYear();
return (monthIndex + 1) + '/' + day + '/' + year;
}
function myNewDate(datestring) {
var dates = datestring.split("/");
var year, month, day;
if (dates.length < 3) {
dates = datestring.split("-");
year = dates[0];
month = dates[1] - 1;
day = dates[2];
} else  {
year = dates[2];
month = dates[0] - 1;
day = dates[1];
}

var days = [31, 28, 31, 30, 31, 30 ,31, 31, 30, 31, 30, 31];
// Overflow day
if (day > days[month])
day = days[month];
return new Date(year, month, day);
}
function newDate(date1, date2) {
var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var year = date1.getFullYear();
var month = date1.getMonth() + 1;
var day = date2.getDate() + 1;

// Check leap year
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
days[1] = 29;
// Overflow day
if (day > days[month])
day = days[month];
var newdate = new Date(year, month, day);
return newdate;
}

在这里,我使用了上面的函数来创建我的新日期。您也可以根据需要通过更新以上内容来增加/减少天/月。

var mpresent = myNewDate(presentDate);
var mstart = myNewDate(startDate);
var myDate =  (formattedDate(newDate(mpresent, mstart)));

最新更新