【问题标题】:Calculating week number with typescript - right-hand side of an arithmetic operation must be of type 'any'使用打字稿计算周数 - 算术运算的右侧必须是“任何”类型
【发布时间】:2017-09-06 06:17:29
【问题描述】:

我一直在寻找要在我的程序中使用的代码,这些代码将使用 typescript 在我的 Angular 应用程序中计算周数(根据 ISO 标准)。仅在 JavaScript 中很难找到一段代码,但我想我可能已经找到了一些东西——问题是我得到一个错误:算术运算的右侧必须是“任何”类型, '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:我最后只求周数。

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    tdtDatefirstThursday 被推断为 number,因为 tdt.valueOf() 返回一个数字,表示自 UTC 1970 年 1 月 1 日午夜起以毫秒为单位的存储时间值。

    您不能在这两个变量之间使用算术运算:

    firstThursday - tdt.
    

    无论如何,您的实际代码并非旨在返回您指定hereISO_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;
    

    【讨论】:

    • 我会在接下来的几天里观看您的干预 :) 哦... Relativise:您的 Mac Pro Book 会有一点延迟,但请尽情享受,作为 Mac,您今天是一个传奇 :)
    • 我决定(只是现在)将其删除为正确答案,因为您提到的帖子使用以下行:var weekNo = Math.ceil(( ( (d - 年开始) / 86400000) + 1)/7);这里的“d”也是一个日期,但它用于算术运算,如果我使用该代码就不足为奇了:给我完全相同的错误......任何进一步的帮助将不胜感激。
    • 好的,我再次将其标记为正确,因为我看到您确实给出了正确的答案,但没有具体指出。也许您可以更改您的答案以供将来参考,说我需要做的就是在“return”行中使用“tdt.valueOf()”,而不仅仅是 tdt。再次感谢。
    猜你喜欢
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    相关资源
    最近更新 更多