2017-01-09 4 views
1

私は、アプリケーションで日付形式の複数の条件を処理しようとしています。この関数はうまく見えますが、問題は私のケースの条件からは何も働かないということです。私は状態に何か間違っていることを理解していますが、正確に何が理解できません。switchメソッドはデフォルト値のみを返します

誰かが私のミスがどこにあるのか教えていただけますか?

var dateSettings = function (value) { 

     var timezone = localStorage.getItem('timezone'); 
     timezone = JSON.parse(timezone); 

     var timeFormat = localStorage.getItem('timeFormat'); 
     timeFormat = JSON.parse(timeFormat); 

     var dateFormat = localStorage.getItem('dateFormat'); 
     dateFormat = JSON.parse(dateFormat); 

     switch(value) { 
      case (timezone === true && timeFormat === true && dateFormat === false): 
       return value = moment.utc(value).format('MMM dd, yyyy HH:mm'); 

      case (timezone === true && timeFormat === false && dateFormat === false): 
       return value = moment.utc(value).format('MMM dd, yyyy HH:mm:ss'); 

      case (timezone === false && timeFormat === false && dateFormat === false): 
       return value = moment(value).format('MMM dd, yyyy HH:mm:ss'); 

      case (timezone === false && timeFormat === false && dateFormat === true): 
       return value = moment(value).format('YYYY-MM-DD HH:mm:ss'); 

      case (timezone === false && timeFormat === true && dateFormat === true): 
       return value = moment(value).format('YYYY-MM-DD HH:mm'); 

      case (timezone === true && timeFormat === false && dateFormat === true): 
       return value = moment.utc(value).format('YYYY-MM-DD HH:mm:ss'); 

      default: 
       return value = moment.utc(value).format('YYYY-MM-DD HH:mm'); 
     } 
    }; 
+0

あなたがそのようなスイッチケースを使うべきではありません....あなたがチェックを持ってしようとしている場合は、 if/else if/else ....を使用してください。 – epascarello

答えて

2

switch-caseif-else文と同じではありません - これはあなたが実際に使用すべきものです。

caseは、valueのみに依存する必要があります。

はこれを見ている:http://www.w3schools.com/js/js_switch.asp

function switchCase(expression) { 
 

 
    switch(expression) { 
 
     case "a": 
 
      console.log("This is an A"); 
 
      break; 
 
     case "b": 
 
      console.log("This is a B"); 
 
      break; 
 
     default: 
 
      console.log("DEFAULT"); 
 
    } 
 
} 
 

 
switchCase("a") 
 
switchCase("banana")

また、あなたが私の目に良いスタイルではありません割り当てreturn value = ...を返します。

ベター行います。私はそれを行うだろう

value = 4; 
return value; 

このあなたのサンプル方法:

var dateSettings = function(value) { 

    var timezone = localStorage.getItem('timezone'); 
    timezone = JSON.parse(timezone); 

    var timeFormat = localStorage.getItem('timeFormat'); 
    timeFormat = JSON.parse(timeFormat); 

    var dateFormat = localStorage.getItem('dateFormat'); 
    dateFormat = JSON.parse(dateFormat); 

    if (timezone === true && timeFormat === true && dateFormat === false) { 
     value = moment.utc(value).format('MMM dd, yyyy HH:mm'); 
    } else if (timezone === true && timeFormat === false && dateFormat === false) { 
     value = moment.utc(value).format('MMM dd, yyyy HH:mm:ss'); 
    } else if (timezone === false && timeFormat === false && dateFormat === false) { 
     value = moment(value).format('MMM dd, yyyy HH:mm:ss'); 
    } else if (timezone === false && timeFormat === false && dateFormat === true) { 
     value = moment(value).format('YYYY-MM-DD HH:mm:ss'); 
    } else if (timezone === false && timeFormat === true && dateFormat === true) { 
     value = moment(value).format('YYYY-MM-DD HH:mm'); 
    } else if (timezone === true && timeFormat === false && dateFormat === true) { 
     value = moment.utc(value).format('YYYY-MM-DD HH:mm:ss'); 
    } else { 
     value = moment.utc(value).format('YYYY-MM-DD HH:mm'); 
    } 
    return value; 
}; 
+0

ええ、それは素晴らしい作品です。私はちょうど私がスイッチメソッド – antonyboom

+0

とこのステートメントを置き換えることができると思った。ちょっと奇妙です: 'switch(true){case(test1):expr1;ブレーク; case(test2):expr2;ブレーク; ... '。 http://stackoverflow.com/questions/14118996/is-switchtrue-valid-javascript –

+0

@ScottSauyetを参照してください。これはわかりませんでしたが、まれです。 – ppasler

関連する問題