angular - 在 Angular 应用程序中没有获得正确日期值的周数
问题描述
我正在制作一个规划器项目,我使用 datefns 库。我有一个函数给出一年中的周数。问题是,只要我单击选定的星期(下拉菜单),它就没有给出正确的日期。我想显示所选周的第一天和最后一天。现在我只能显示第一天。如何显示所选周的正确日期和所选周的最后一天?
这是我的 ts 代码:
export class AppComponent implements OnInit {
selectedWeek! : Date;
weeks!: any[];
display = false;
date = new Date(); //null
constructor() {}
ngOnInit(): void {
this.selectedWeek = new Date();
this.weeks = this.getWeeks();
}
getWeeks() {
const startDate = new Date(new Date().getFullYear(), 0, 1); // first day of the year
console.log(startDate);
const endDate = new Date(new Date().getFullYear(), 11, 31); // last day of the year
console.log(endDate);
// How many full weeks are between end date & start date
var result = [];
const count = differenceInWeeks(endDate, startDate);
result = Array.from({ length: count }, (_, i) => `Week ${i + 1}`);
console.log('array of weeks', count);
return result;
}
changeWeek(week: Date) {
let date = week;
this.selectedWeek = date;
this.weeks = this.getWeeks();
this.display = true;
}
}
还有我的模板代码
<h2 style="margin: 10px 0px 0px 100px"> Planner</h2>
<div class="plannerHeader" role="row">
<div class="planner" style="width:160px" >
<div class="weekOptions" ngbDropdown>
<div
class="chevron"
id="navbarScrollingDropdown"
ngbDropdownToggle
data-no-icon="true"
>
<span *ngIf="!display">Week {{ date | date: 'w' }}</span>
<span *ngIf="display">{{ selectedWeek }}</span>
</div>
<ul
class="dropdown-menu"
ngbDropdownMenu
aria-labelledby="navbarScrollingDropdown"
>
<li
ngbDropdownItem
*ngFor="let week of weeks"
class="dropdown-item"
(click)="changeWeek(week)"
>
<div>{{ week }}</div>
</li>
</ul>
</div>
</div>
<div class="plannerBottom">
<p>
From <b>{{ selectedWeek | date: 'd MMMM yyyy' }}</b> to
<b>{{ selectedWeek | date: 'd MMMM yyyy' }}</b>
</p>
</div>
</div>
这是我的工作演示StackBlitz。
解决方案
正如您所解释的,我已经进行了更改以使其工作,我已经分叉了您的 StackBlitz 项目,因此您可以在此处查看更新版本。
关键变化是订单项的点击事件以及周列表的生成方式。生成的列表使用对象数组(具有日期和标签)。
将选定的日期移动到它自己的状态并添加一个单独的函数来处理日期信息的填充(一周的开始和结束)允许更轻松地生成周列表的逻辑和一次性操作。
推荐阅读
- python - 如何使用 selenium 和 python 从网页中获取可读文本
- c++ - 与字符连接时字符串连接不起作用
- node.js - 错误:没有匹配函数调用 'v8::Object::Set(v8::Local
- python - 如何在python中合并两个不相等的嵌套列表?
- postgresql - 将传入的文本时间戳从 rsyslog 转换为 postrgesql 的时间戳
- sharepoint - 如何使用 SPServices 和 JavaScript 更新 SharePoint 库子文件夹中的列表项
- python - 降低时间序列数据 x 轴的时间频率
- jenkins - Jenkins:如何永远保持升级版本?(请不要关闭)
- java - Xpath 替换 / Selenium Java
- prolog - 将列表从 findall 谓词转换为字符串序言