2017-01-09 87 views
1

我想在我的应用程序中处理日期格式的多个条件,并为此使用切换方法。该功能看起来不错,但问题是没有任何从我的病例情况不起作用。我了解情况有问题,但不明白究竟是什么。切换方法只返回默认值

有人能告诉我我的错误在哪里吗?

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-case是不一样的if-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