Reputation: 1181
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
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