使用打字稿计算周数 - 算术运算的右侧必须是“任意”类型

时间:2017-09-06 06:17:30

标签: javascript typescript

我一直在寻找在我的程序中使用的代码,它将使用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:我最终只是在寻找周数。

1 个答案:

答案 0 :(得分:1)

tdtDatefirstThursday被视为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;