gpt4 book ai didi

javascript - 日期对象的行为不符合预期

转载 作者:行者123 更新时间:2023-11-28 04:41:07 24 4
gpt4 key购买 nike

我有一个控件,可以在我的应用程序开始时显示当前月份和年份。它有 2 个按钮,可以将当前月份加或减 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);
}
/*
$scope.StartOfRange = new Date($scope.CurrentDate.getFullYear(), $scope.CurrentDate.getMonth());
alert($scope.StartOfRange.getDate());
$scope.StartOfRange.setDate(1);
alert($scope.StartOfRange.getDate());
//$scope.StartOfRange.setDate(1);
$scope.EndOfRange = new Date($scope.CurrentDate.getFullYear(), $scope.CurrentDate.getMonth()+1);
$scope.EndOfRange.setDate($scope.EndOfRange.getDate() - 1);
*/

//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.StartOfRange = new Date($scope.CurrentDate.getFullYear(), $scope.CurrentDate.getMonth()+1, 0);

console.log("Start");
console.log($scope.StartOfRange);
console.log("End");
console.log($scope.EndOfRange);

//.setHours(0,0,0,0)

//$scope.DateChanged();
}

我想为此添加 2 个全局变量。范围开始/结束。他们必须存储该月的第一天和最后一天。您可以看到相当多的代码已被注释掉,我一直在尝试在网上找到的很多不同的示例。我被困在 setDate() (也许它不再在我提供的代码中,我确实尝试使用它但无法让它工作)函数。如果我用参数 1 调用它,它会将日期设置为 30。我也尝试过 UTC 时间。

奇怪的是,当我使用警报时,它按预期显示 1。当我使用 console.log 时,它没有。我尝试了从 1 到 30 的所有值,它们都给出了模糊的意外结果。

从 w3 ( https://www.w3schools.com/jsref/jsref_obj_date.asp ) 读取,我正确地调用了它。我确实设法通过构造一个新的日期对象来获取正确的日期,其中日期(或日期,有点令人困惑,第三个参数)设置为-29。似乎始终将日期设置为 1,但绝对不是长期解决方案。

最佳答案

您可以使用以下两个函数来查找当月的第一天和最后一天。

$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;
}
}
}

关于javascript - 日期对象的行为不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43762640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com