2017-05-11 6 views
1

2つの値があります。 1 [文字列]と1 [INT] タイムゾーンは、これらの値のいずれかの文字列である:Javascriptでの数学演算の文字列の解析

'EST-5:00' || 'CST-6:00' || 'MST-7:00' || 'PST-8:00' 

DSTは0 || 1のINTであろう。

オフセットを取得する方法を理解しようとしています。 offset = MATH.abs(TimeZone#+ DST)ie。

let offset = MATH.abs(-5 + 1) // = 4 ('EST-5:00') + (DST = 1) 

または

let offset = MATH.abs(-6 + 0) // = 6 ('CST-6:00') + (DST = 0) 

または

let offset = MATH.abs(-8 + 1) // = 7 ('PST-8:00') + (DST = 1) 

数の値を取得し、DSTの値を追加する文字列を解析するための最良の方法は何ですか?上記のタイムゾーンの文字列と一緒に

let DateTime = '2017-05-11 10:34:43' 

(イベントに関連するメタデータから取得)し、使用してUTCに変換:


私の最終目標は、私のような持っているのDateTimeを取得するために実際にありますDST Int(イベントに関連するメタデータから取得したもの)...

私は、作業する必要があるデータを指定してDateTimeに何時間(時間)を追加してUTCに設定する必要があるかを調べようとしています。

はそう

let utcTime = moment(DateTime).add(offset, 'h'); 
+4

'String'のRegExpと' match'メソッド – Gerardo

+1

オフセットは15分になるので、分の部分も考慮する必要があります。オフセットの符号も保持する必要があります。-5:00は+5:00と10時間異なります。一部の夏時間のオフセットは30分です。タイムゾーン名は標準化されていないため、パターンと一致しない可能性があります。同じ省略形は複数のタイムゾーンを表すことがありますので、数字部分は重要なビットです。 – RobG

答えて

1

あなたは数字上の一致グループとの定期的な表現を行うことができます:ハイフン

var value = '(\'PST-8:00\')'.match(/\w{3}-(\d{1})\:/).pop() + DST // => 8 + DST 

それは3つのワード一連の文字を探し、その後、コロン文字で終わる前に1桁でマッチします。

これはちょうど私の頭の上から外されたので、正規表現を強化する方法はあると確信していますが、原則は同じです(MDNのString.prototype.match文書を参照)。

+1

タイムゾーンの '-'は、ゾーンとオフセットの間の区切りではなく、' -N'時間(負)を意味します。 '+ N'時間もあるはずです。 OPは負のタイムゾーンオフセットを列挙しました。また、10時間以上のオフセットを取ることも可能です。さらに、OPが必要な場合は分かりませんが、分のオフセットを取ることは可能です。 –

0

は、あなただけの数の一部をしたいので、あなたは、時間と分の値を取得するために正規表現を使用することができます。

var tz = 'EST-5:00'; 
var hm = tz.match(/[+-]?\d\d?/g); 

は、時間の部分を取得します。 hm[0]は符号付きの時間部分で、 `hm [1]は分部分です。あなたにも、文字の部分をしたい場合は、それはあまりにも収容することができます。

var hm = tz.match(/[a-z]+|[+-]?\d\d?/ig); 

いくつかのタイムゾーンがダウンして15分に行くと夏時間オフセットは30分することができ、数分でオフセットを表現するために、より互換性のある時間よりも(人間の場合は±hh:mm形式でなければなりません)。また、一部と記号分を維持する必要があります。例えば、今、サマータイムがオフセット

var tz = 'EST-5:00'; 
 

 
function offsetToMins(s) { 
 
    var hm = s.match(/[+-]?\d\d?/g) || []; // Avoid null 
 
    var h = hm[0] * 60; 
 
    var m = +hm[1]; 
 

 
    // A bit of validation 
 
    if (isNaN(h) || isNaN(m)) { 
 
    return 'Invalid input: ' + '"' + s + '"'; 
 
    } 
 

 
    return h + (h<0? m*-1 : m); 
 
} 
 

 
console.log(offsetToMins(tz))   // -300 
 
console.log(offsetToMins('IST+05:30')) // 330 
 
console.log(offsetToMins('foo'))  // Invalid input: "foo"

は数分で追加することができ、その値は、適切な人間が読める形式で提示することができます-06:00、-6:00、-0600、何でも。