Javascript 天输出到范围格式?



>我有一个javascript对象,其中包含一周中的几天和一个true/false值(如果它们是否已被选中(。

然后,我将这个对象传递给一个函数,我需要以特定的方式格式化日期并返回它。

从本质上讲,如果任何日子紧随另一天之后,它也是正确的,它将把这些选定的日子显示为一个范围,例如M-F.如果所选日期M, T, F,则输出将M-T, F

这是我如何设置的示例:

// Define our selected days
var days = {
sunday: true,
monday: false,
tuesday: false,
wednesday: true,
thursday: true,
friday: false,
saturday: false
};
// Format our dates
function formatDates(days) {
// Logic Here
return days;
}
console.log(formatDates(days));
// Scenarios 
/* Input 
1: Checked: Su, W, Th
2: Checked: Su, M, T, Sa
3: Checked: M, T, Th, Sa
4: Checked: T, Th, Sa, Sun
/*
/*
Output
1: Su, W, Th
2: Sa - T
3: M - T, Th, Sa
4: Sa - Su, T, Th
/*

这是上述代码的小提琴:https://jsfiddle.net/ghs3Lthj/1

问题:是否有任何我应该知道的日期函数像这样的句柄范围,或者它是否需要自定义?

只是不确定是否存在我可以说"以范围样式格式显示我这些天"的内容。

由于对象中的属性没有保证的顺序,因此您最好在一天中使用数组。数组适用于顺序很重要的情况。

此外,您需要定义每天的缩写。

所以我建议这种结构:

var days = [
{ name: "sunday",    abbrev: "Su", selected: true  },
{ name: "monday",    abbrev: "M",  selected: false },
{ name: "tuesday",   abbrev: "Tu", selected: false },
{ name: "wednesday", abbrev: "W",  selected: true  },
{ name: "thursday",  abbrev: "Th", selected: true  },
{ name: "friday",    abbrev: "F",  selected: false },
{ name: "saturday",  abbrev: "Sa", selected: false }
];

然后,我将为所有选定日期创建一个简单的逗号分隔字符串,然后使用字符串替换来获得所需的格式:

function formatDates(days) {
return days.map( day => day.selected ? day.abbrev : "" )
.join(", ")
.replace(/(w+)(?:, w+)*, (w+)/g, "$1 - $2") // insert hyphen were appropriate
.replace(/^(, )+|, (?=,|$)/g, "") // remove commas we don't need
}
var days = [
{ name: "sunday",    abbrev: "Su", selected: true  },
{ name: "monday",    abbrev: "M",  selected: false },
{ name: "tuesday",   abbrev: "Tu", selected: false },
{ name: "wednesday", abbrev: "W",  selected: true  },
{ name: "thursday",  abbrev: "Th", selected: true  },
{ name: "friday",    abbrev: "F",  selected: false },
{ name: "saturday",  abbrev: "Sa", selected: false }
];
console.log(formatDates(days));

注意:连续几天的对也将用连字符显示,即使逗号也可以。如果在这种情况下更喜欢逗号,请将第一个正则表达式中的*替换为+

最新更新