2017-09-06 72 views
0

私のプログラムで使用するコードを調べてみましたが、週番号を(ISO標準に従って)計算します。 typescriptを使用して私の角度アプリ。 JavaScriptでちょうどあるコードを見つけるのは非常に難しいですが、私は何かを見つけたかもしれないと思います。エラー:算術演算の右辺は 'any'、 'number 'または列挙型です。typescriptで週数を計算する - 算術演算の右辺は 'any'タイプでなければなりません

私はこれが何を意味するかわかりません。

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

tdtDatefirstThursdayあるtdt.valueOf()深夜1970年1月1日UTCからのミリ秒で記憶された時間値を表す数値を返すためnumberとしてinferedれます。

あなたはこれらの二つの変数間の算術演算を使用することはできません。

firstThursday - tdt. 

とにかく、あなたの実際のコードは、あなたがhereを指定されているようISO_8601週間の日付の表現を返すように設計されていません。 Dateを返しますが、Stringを返す必要があります。
たとえば、この入力DateMonday 29 December 2008は、String"2009-W01-1"を返します。

年の取得と曜日の数は日をする方法を提供ストレートのとおりです。年間の週数について

var dayNumber = date.getDay() + 1; 
var year = date.getFullYear(); 

を、あなたはこれを実装する必要があります。
私はあなたにこのpostの受け入れられた答えのコードに頼ることを勧めます。

はその後、わずか3つの値連結:私はあなたの介入を見ます

String isoWeek = year + "-W-" + weekNumber + "-" + dayNumber; 
+1

を次の日:)ああ... Relativise:お使いのMac Proの書籍は、Macのように、少し遅れを持っていますが、お楽しみいただけます、あなた今日は伝説です:) – davidxxx

+0

私は、あなたが参照した投稿が次の行を使用しているという事実のために、正しい答えとしてこれを削除することにしました:var weekNo = Math.ceil((((d - yearStart)/ 86400000)+ 1)/ 7);ここで "d"も日付ですが、それは算術演算で使用されていますが、そのコードを使用すると驚くことはありません。まったく同じエラーを返します。 –

+0

私はあなたが正しい答えを与えたことを実際に指摘せずに確認したので、再度正しくマークしました。たぶんあなたの答えを変更して、私がする必要があるのは、ちょうどtdtの代わりに "return"行に "tdt.valueOf()"を使うことだけです。再度、感謝します。 –

関連する問題