Bootstrap Safari 上的 DatePicker / Angular
Bootstrap DatePicker on Safari / Angular
我需要一些有关 Safari 浏览器的帮助。我有一个 angular 应用程序,它具有 select 在 datepicken 的当周 ngOnInit 上的功能。
它适用于 firefox、brave、chrome 等。
但它不适用于 safari。
不知道怎么解决。 google 搜索对我没有任何帮助。有人说它在 safari 上不起作用,但我不知道如何解决它。
如前所述,我需要一个自动 select 显示当前周的日期选择器。因为我必须在数据库中保存周数 + 年(“22/2022”)。但我也希望能够 select 接下来的几周。
ts 页
ngOnInit(): void {
this.onDateSelection(this.calendar.getToday());
}
getWeekNumber(from: NgbDate) {
let currentDate = new Date(from.year, from.month, from.day);
var oneJan = new Date(currentDate.getFullYear(), 0, 1);
var numberOfDays = Math.floor(
(Number(currentDate) - Number(oneJan)) / (24 * 60 * 60 * 1000)
);
return Math.ceil((currentDate.getDay() + 1 + numberOfDays) / 7);
}
onDateSelection(date: NgbDate) {
let fromDate = new Date(date.year + "-" + date.month + "-" + date.day);
let time = fromDate.getDay() ? fromDate.getDay() - 1 : 6;
fromDate = new Date(fromDate.getTime() - time * 24 * 60 * 60 * 1000);
this.fromDate = new NgbDate(
fromDate.getFullYear(),
fromDate.getMonth() + 1,
fromDate.getDate()
);
const toDate = new Date(fromDate.getTime() + 6 * 24 * 60 * 60 * 1000);
this.toDate = new NgbDate(
toDate.getFullYear(),
toDate.getMonth() + 1,
toDate.getDate()
);
this.currentDate = `${
this.fromDate.day < 10 ? "0" + this.fromDate.day : this.fromDate.day
}.${
this.fromDate.month < 10 ? "0" + this.fromDate.month : this.fromDate.month
}. - ${this.toDate.day < 10 ? "0" + this.toDate.day : this.toDate.day}.${
this.toDate.month < 10 ? "0" + this.toDate.month : this.toDate.month
}.${this.toDate.year}`;
}
isHovered(date: NgbDate) {
return (
this.fromDate &&
!this.toDate &&
this.hoveredDate &&
date.after(this.fromDate) &&
date.before(this.hoveredDate)
);
}
isInside(date: NgbDate) {
return this.toDate && date.after(this.fromDate) && date.before(this.toDate);
}
isRange(date: NgbDate) {
return (
date.equals(this.fromDate) ||
(this.toDate && date.equals(this.toDate)) ||
this.isInside(date) ||
this.isHovered(date)
);
}
html 页
safari 的日期格式正则表达式过多。你必须那样更换。例如
getWeekNumber(from: NgbDate) {
let currentDate = new Date(from.year.replace(/-/g, "/"), from.month.replace(/-/g, "/"), from.day.replace(/-/g, "/"));
...
}
只需将新的 Date() 修改为
onDateSelection(date: NgbDate) {
let fromDate = new Date(date.year, date.month - 1, date.day);
...
}
我需要一些有关 Safari 浏览器的帮助。我有一个 angular 应用程序,它具有 select 在 datepicken 的当周 ngOnInit 上的功能。
它适用于 firefox、brave、chrome 等。
但它不适用于 safari。
不知道怎么解决。 google 搜索对我没有任何帮助。有人说它在 safari 上不起作用,但我不知道如何解决它。
如前所述,我需要一个自动 select 显示当前周的日期选择器。因为我必须在数据库中保存周数 + 年(“22/2022”)。但我也希望能够 select 接下来的几周。
ts 页
ngOnInit(): void {
this.onDateSelection(this.calendar.getToday());
}
getWeekNumber(from: NgbDate) {
let currentDate = new Date(from.year, from.month, from.day);
var oneJan = new Date(currentDate.getFullYear(), 0, 1);
var numberOfDays = Math.floor(
(Number(currentDate) - Number(oneJan)) / (24 * 60 * 60 * 1000)
);
return Math.ceil((currentDate.getDay() + 1 + numberOfDays) / 7);
}
onDateSelection(date: NgbDate) {
let fromDate = new Date(date.year + "-" + date.month + "-" + date.day);
let time = fromDate.getDay() ? fromDate.getDay() - 1 : 6;
fromDate = new Date(fromDate.getTime() - time * 24 * 60 * 60 * 1000);
this.fromDate = new NgbDate(
fromDate.getFullYear(),
fromDate.getMonth() + 1,
fromDate.getDate()
);
const toDate = new Date(fromDate.getTime() + 6 * 24 * 60 * 60 * 1000);
this.toDate = new NgbDate(
toDate.getFullYear(),
toDate.getMonth() + 1,
toDate.getDate()
);
this.currentDate = `${
this.fromDate.day < 10 ? "0" + this.fromDate.day : this.fromDate.day
}.${
this.fromDate.month < 10 ? "0" + this.fromDate.month : this.fromDate.month
}. - ${this.toDate.day < 10 ? "0" + this.toDate.day : this.toDate.day}.${
this.toDate.month < 10 ? "0" + this.toDate.month : this.toDate.month
}.${this.toDate.year}`;
}
isHovered(date: NgbDate) {
return (
this.fromDate &&
!this.toDate &&
this.hoveredDate &&
date.after(this.fromDate) &&
date.before(this.hoveredDate)
);
}
isInside(date: NgbDate) {
return this.toDate && date.after(this.fromDate) && date.before(this.toDate);
}
isRange(date: NgbDate) {
return (
date.equals(this.fromDate) ||
(this.toDate && date.equals(this.toDate)) ||
this.isInside(date) ||
this.isHovered(date)
);
}
html 页
safari 的日期格式正则表达式过多。你必须那样更换。例如
getWeekNumber(from: NgbDate) {
let currentDate = new Date(from.year.replace(/-/g, "/"), from.month.replace(/-/g, "/"), from.day.replace(/-/g, "/"));
...
}
只需将新的 Date() 修改为
onDateSelection(date: NgbDate) {
let fromDate = new Date(date.year, date.month - 1, date.day);
...
}