我有一个控件,显示我的应用程序开始时的当前月份和年份。它有2个按钮,可以在当前月份中加1或减1。我使用相同的函数来添加/减去初始化日期,方法是用0调用它。这是函数:
$_POST['address']
我想在此添加2个全局变量。启动/ EndOfRange。他们必须存储该月的第一天和最后一天。您可以看到相当多的代码被注释掉了,我一直在尝试在网上找到很多不同的例子。我停留在setDate()(也许它不在我提供的代码中,我确实尝试使用它但无法使其工作)功能。如果我用param 1调用它,它会将日期设置为30.我也尝试过UTC时间。
奇怪的是,当我使用警报时,它会显示为1。当我使用console.log时,它没有。我尝试了从1到30的所有值,它们都给出了模糊的意外结果。
从w3(https://www.w3schools.com/jsref/jsref_obj_date.asp)读取我正确地调用它。我设法通过构造一个新的日期对象来设置为-29,从而获得正确的日期。日期(或日期,位混淆,第三个参数)设置为-29。似乎始终将日期设置为1,但不是长期解决方案。
答案 0 :(得分:0)
您可以使用以下两个功能查找当月的第一天和最后一天。
$scope.StartOfRange = $scope.getFirstDay();
$scope.EndOfRange = $scope.getLastDay();
$scope.getFirstDay = function ()
{
var currDate = new Date();
year = currDate.getFullYear();
month = currDate.getMonth();
day = currDate.getDate();
var lastMonth = month - 1;
if (month == 0) {
year--;
lastMonth = 11;
}
lastDay = 28;
var previousMonthDate = new Date(year, lastMonth,lastDay);
while (previousMonthDate < currDate)
{
previousMonthDate = new Date(year, lastMonth, lastDay++);
var curMonth = previousMonthDate.getMonth();
if (curMonth == month)
{
console.log("First Day :" + previousMonthDate);
return previousMonthDate;
}
}
}
$scope.getLastDay = function () {
var currDate = new Date();
year = currDate.getFullYear();
var nextYear = year;
month = currDate.getMonth();
day = currDate.getDate();
var nextMonth = month + 1;
if (month == 11) {
nextYear++;
nextMonth = 0;
}
lastDay = 28;
var currentMonthDate = new Date(year, month, lastDay);
var nextMonthDate = new Date(nextYear, nextMonth, 1);
while (currentMonthDate < nextMonthDate) {
var finalDate = currentMonthDate;
currentMonthDate = new Date(year, month, lastDay++);
var curMonth = currentMonthDate.getMonth();
if (curMonth == nextMonth) {
console.log("LastDay :" + finalDate);
return finalDate;
}
}
}
答案 1 :(得分:0)
使用此代码:
$scope.SetDateMonth = function (modifier) {
if (modifier === 0) {
//initialize the current date, only called on load
$scope.CurrentDate = new Date();
} else {
//alter the currentdate
$scope.CurrentDate.setMonth($scope.CurrentDate.getMonth() + modifier);
}
//set startofrange to first day of month
$scope.StartOfRange = new Date($scope.CurrentDate.getFullYear(), $scope.CurrentDate.getMonth(), 1);
//this sets the date to the last day of the previous month. Bc. we add 1 to the month, this will result in the last day of CurrentMonth
$scope.EndOfRange = new Date($scope.CurrentDate.getFullYear(), $scope.CurrentDate.getMonth()+1, 0);
console.log("Start");
console.log($scope.StartOfRange);
console.log("End");
console.log($scope.EndOfRange);
}
检查firefox和Internet Explorer中的控制台输出。由于当前日期是4-5-2017,StartOfRange应为1-5-2017,EndOfRange应为31-5-2017。
的FireFox:
Start
Date 2017-04-30T22:00:00.000Z
End
Date 2017-05-30T22:00:00.000Z
IE:
Start
[date] Mon May 01 2017 00:00:00 GMT+0200
End
[date] Wed May 31 2017 00:00:00 GMT+0200
如果让firefox使用相同的代码,我会编辑。
编辑1: 添加了这段代码:
var test = $scope.CurrentDate;
test.setDate(1);
console.log("test:");
console.log(test);
由于某种原因,这可以正常工作。但是,它不仅设置测试的日期,因为它是对CurrentDate的引用。我不明白为什么这会起作用,但在构造函数中将date设置为1不会..