我一直在寻找在我的程序中使用的代码,它将使用typescript在我的Angular应用程序中计算周数(根据ISO标准)。很难在JavaScript中找到一段代码,但我想我可能找到了一些东西 - 问题是我得到了一个错误:算术运算的右侧必须是'any'类型, 'number'或枚举类型。
我不知道这意味着什么。 这是我尝试编写以使用代码的服务:
import { Injectable } from '@angular/core';
@Injectable()
export class WeekNumberService {
constructor() { }
ISO8601_week_no(dt) {
var tdt = new Date(dt.valueOf());
var dayn = (dt.getDay() + 6) % 7;
tdt.setDate(tdt.getDate() - dayn + 3);
var firstThursday = tdt.valueOf();
tdt.setMonth(0, 1);
if (tdt.getDay() !== 4)
{
tdt.setMonth(0, 1 + ((4 - tdt.getDay()) + 7) % 7);
}
return 1 + Math.ceil((firstThursday - tdt) / 604800000);
}
}
PS:我最终只是在寻找周数。
答案 0 :(得分:1)
tdt
是Date
,firstThursday
被视为number
因为tdt.valueOf()
返回一个数字,表示自1月午夜以来的存储时间值(以毫秒为单位) 1,1970 UTC。
您不能在这两个变量之间使用算术运算:
firstThursday - tdt.
无论如何,您的实际代码并非旨在返回您指定here的 ISO_8601周日期的表示形式。
如果您返回Date
,则返回String
例如,此输入Date
Monday 29 December 2008
应返回此String
:"2009-W01-1"
。
获取一周中的年份和日期编号是正确的,因为Date提供了以下方法:
var dayNumber = date.getDay() + 1;
var year = date.getFullYear();
关于一年中的周数,您必须实施此项目 我邀请您依赖此post的接受答案中的代码。
然后,只连接三个值:
String isoWeek = year + "-W-" + weekNumber + "-" + dayNumber;