antonyboom
antonyboom

Reputation: 1181

switch method returns only default value

I'm trying to handle multiple conditions for date format in my app and using for this purposes switch method. The function looks well but the problem is that nothing from my cases' conditions doesn't work. I understand that something wrong with condition but cannot understand what exactly.

Could anybody tell me where my mistake is?

 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');
        }
    };

Upvotes: 1

Views: 59

Answers (1)

ppasler
ppasler

Reputation: 3729

switch-case is not the same as if-else statements - this is what you actually should use.

The case has to depend only on value.

Have a look at this: 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")

Also you return an assignment return value = ... which is not good style in my eyes.

Better do:

value = 4;
return value;

This your sample the way I would do it:

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;
};

Upvotes: 2

Related Questions