如何连续20个月每月显示一条新消息
How to display a new message each month for 20 consecutive months
我希望有人能帮我解决这个问题。我正在写一个 JavaScript 以在问候语重新开始之前连续 20 个月每月显示 20 条问候语之一。下面是 GreetingDetails 数组:
var GreetingDetails = [
{// index0
Greeting: "Foreign Greeting 0",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation0.mp3",
CommerceLink: link
}, // index0
{// index1
Greeting: "Foreign Greeting 1",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation1.mp3",
CommerceLink: link
}, // index1
{// index2
Greeting: "Foreign Greeting 2",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation2.mp3",
CommerceLink: link
}, // index2
{// index3
Greeting: "Foreign Greeting 3",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation3.mp3",
CommerceLink: link
}, // index3
{// index4
Greeting: "Foreign Greeting 4",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation4.mp3",
CommerceLink: link
}, // index4
{// index5
Greeting: "Foreign Greeting 5",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation5.mp3",
CommerceLink: link
}, // index5
{// index6
Greeting: "Foreign Greeting 6",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation6.mp3",
CommerceLink: link
}, // index6
{// index7
Greeting: "Foreign Greeting 7",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation7.mp3",
CommerceLink: link
}, // index7
{// index8
Greeting: "Foreign Greeting 8",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation8.mp3",
CommerceLink: link
}, // index8
{// index9
Greeting: "Foreign Greeting 9",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation9.mp3",
CommerceLink: link
}, // index9
{// index10
Greeting: "Foreign Greeting 10",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation10.mp3",
CommerceLink: link
}, // index10
{// index11
Greeting: "Foreign Greeting 11",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation11.mp3",
CommerceLink: link
}, // index11
{// index12
Greeting: "Foreign Greeting 12",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation12.mp3",
CommerceLink: link
}, // index12
{// index13
Greeting: "Foreign Greeting 13",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation13.mp3",
CommerceLink: link
}, // index13
{// index14
Greeting: "Foreign Greeting 14",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation14.mp3",
CommerceLink: link
}, // index14
{// index15
Greeting: "Foreign Greeting 15",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation15.mp3",
CommerceLink: link
}, // index15
{// index16
Greeting: "Foreign Greeting 16",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation16.mp3",
CommerceLink: link
}, // index16
{// index17
Greeting: "Foreign Greeting 17",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation17.mp3",
CommerceLink: link
}, // index17
{// index18
Greeting: "Foreign Greeting 18",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation18.mp3",
CommerceLink: link
}, // index18
{// index19
Greeting: "Foreign Greeting 19",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation19.mp3",
CommerceLink: link
} // index19
];
我尝试了几种不同的方法,测试得到每个问候语,但继续 运行 解决只得到 12. 12 的问题,因为一年有 12 个月,我正在检查在 for 循环中进行比较的月份。我想让它尽可能动态,这样就没有人需要再次触摸了。这是我最成功的日期比较尝试:
var m = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September','October', 'November', 'December'];
var y = [];
var d = new Date();
//var test = new Date(2020, 1, 1);
// This for loop adds the years to the y-array
for (var i = 0; i < addYears; i++) {
y.push(startYear++);
}
//alert(m.length);
//alert(y.length);
for (var i = 0; i < y.length; i++) {
if (d.getFullYear() === y[i]) {
for (var j = 0; j < GreetingDetails.length; j++) {
if (m[d.getMonth()] === m[j]) {
GreetingBuilder = GreetingDetails[j];
}
}
}
}
var GreetingBuilder;
GreetingElements = {
topSection: function () {
var holder = document.createElement("section");
holder.id = "required-greeting";
return holder;
},
accessabilityP: function () {
var holder = document.createElement("p");
holder.classList.add("visuallyhidden");
holder.innerText = "The following is a greeting given in one of 20 foreign languages.";
return holder;
},
greetingContainer: function () {
var holder = document.createElement("dl");
holder.id = "language-greeting";
return holder;
},
greetingDT: function () {
var holder = document.createElement("dt");
holder.classList.add("greeting");
return holder;
},
greetingLink: function () {
var holder = document.createElement("a")
holder.href = GreetingBuilder.CommerceLink;
holder.classList.add("language-link");
holder.text = GreetingBuilder.Greeting;
return holder;
},
audioContainer: function () {
var holder = document.createElement("dd");
holder.classList.add("speaker");
return holder;
},
audioPlayer: function () {
var holder = document.createElement("audio");
holder.id = GreetingBuilder.Language.toLowerCase().replace(" ", "-");
holder.src = GreetingBuilder.AudioPath;
holder.preload = "auto";
return holder;
},
audioButton: function () {
var holder = document.createElement("button");
holder.classList.add("pronunciation");
holder.onclick = function () {
document.getElementById(GreetingElements.audioPlayer().id).play();
};
holder.innerText = "Listen to pronunciation";
return holder;
},
languageNameDD: function () {
var holder = document.createElement("dd");
holder.classList.add("language");
holder.innerText = "(" + GreetingBuilder.Language + ")";
return holder;
},
languageTranslationDD: function () {
var holder = document.createElement("dd");
holder.classList.add("translation");
holder.innerText = '"' + GreetingBuilder.Translation + '"';
return holder;
},
getFullGreetingSection: function () {
var sectionInstance = this.topSection();
var greetingDTInstance = this.greetingDT();
var greetingContainerInstance = this.greetingContainer();
var audioContainerInstance = this.audioContainer();
greetingDTInstance.appendChild(this.greetingLink());
greetingContainerInstance.appendChild(greetingDTInstance);
audioContainerInstance.appendChild(this.audioPlayer());
audioContainerInstance.appendChild(this.audioButton());
greetingContainerInstance.appendChild(audioContainerInstance);
greetingContainerInstance.appendChild(this.languageNameDD());
greetingContainerInstance.appendChild(this.languageTranslationDD());
sectionInstance.appendChild(this.accessabilityP());
sectionInstance.appendChild(greetingContainerInstance);
return sectionInstance;
}
}
document.getElementsByClassName("back-to-top")[0].insertAdjacentElement('afterend', GreetingElements.getFullGreetingSection());
如果您发现我做错了什么,请告诉我。我确信有更好的方法来解决这个问题,因此我们将不胜感激。
只有 12 个月所以只有 12 个唯一值可以使用但需要 20 个?使用年份!
2020 = 0
2021 = 1
所以你的第 13 个月是 2021 年 1 月,或者 12+1 等等。
用当前年份减去 2020 年。将其添加到当前月份。将值包装在 0 和 19 之间。
指定一个可以计算月份的过去日期。然后,取从那时起经过的月份,并 mod 它乘以你的问候语数组的长度。
尝试调整"pastDate"来模拟时间的流逝,得到不同的问候。
var greetings = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19].map (x=> "Greeting #" + x);
var currentDate = new Date();
var pastDate = new Date("2018-10-01"); // pick arbitrary point in past as the "first" month
var differenceInYears = currentDate.getYear() - pastDate.getYear(); // 20 years ago
var index = differenceInYears * 12 + currentDate.getMonth() - pastDate.getMonth(); // how many months ago we "started" counting
console.log(greetings[index%greetings.length]);
var basedate = new Date(2020, 00);
function monthDiff(dateFrom, dateTo) {
return dateTo.getMonth() - dateFrom.getMonth() +
(12 * (dateTo.getFullYear() - dateFrom.getFullYear()))
}
function showmessage() {
var curdate = new Date($('#curdate').val());
var diff = monthDiff(basedate, curdate);
while(diff > 19){
diff = diff - 19;
}
$('#output').append('<div>Greeting: ' + GreetingDetails[diff].Greeting + '</div>');
}
var link = '';
var GreetingDetails = [{ // index0
Greeting: "Foreign Greeting 0",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation0.mp3",
CommerceLink: link
}, // index0
{ // index1
Greeting: "Foreign Greeting 1",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation1.mp3",
CommerceLink: link
}, // index1
{ // index2
Greeting: "Foreign Greeting 2",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation2.mp3",
CommerceLink: link
}, // index2
{ // index3
Greeting: "Foreign Greeting 3",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation3.mp3",
CommerceLink: link
}, // index3
{ // index4
Greeting: "Foreign Greeting 4",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation4.mp3",
CommerceLink: link
}, // index4
{ // index5
Greeting: "Foreign Greeting 5",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation5.mp3",
CommerceLink: link
}, // index5
{ // index6
Greeting: "Foreign Greeting 6",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation6.mp3",
CommerceLink: link
}, // index6
{ // index7
Greeting: "Foreign Greeting 7",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation7.mp3",
CommerceLink: link
}, // index7
{ // index8
Greeting: "Foreign Greeting 8",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation8.mp3",
CommerceLink: link
}, // index8
{ // index9
Greeting: "Foreign Greeting 9",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation9.mp3",
CommerceLink: link
}, // index9
{ // index10
Greeting: "Foreign Greeting 10",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation10.mp3",
CommerceLink: link
}, // index10
{ // index11
Greeting: "Foreign Greeting 11",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation11.mp3",
CommerceLink: link
}, // index11
{ // index12
Greeting: "Foreign Greeting 12",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation12.mp3",
CommerceLink: link
}, // index12
{ // index13
Greeting: "Foreign Greeting 13",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation13.mp3",
CommerceLink: link
}, // index13
{ // index14
Greeting: "Foreign Greeting 14",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation14.mp3",
CommerceLink: link
}, // index14
{ // index15
Greeting: "Foreign Greeting 15",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation15.mp3",
CommerceLink: link
}, // index15
{ // index16
Greeting: "Foreign Greeting 16",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation16.mp3",
CommerceLink: link
}, // index16
{ // index17
Greeting: "Foreign Greeting 17",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation17.mp3",
CommerceLink: link
}, // index17
{ // index18
Greeting: "Foreign Greeting 18",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation18.mp3",
CommerceLink: link
}, // index18
{ // index19
Greeting: "Foreign Greeting 19",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation19.mp3",
CommerceLink: link
} // index19
];
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type='date' id="curdate" />
<button type="button" onclick='showmessage()'>Show</button>
<div id="output">
</div>
你需要一个基准日期来决定哪个月份是0。
然后你需要今天的月份和基准月份之间的月份差。
如果差异大于 20,则减去 20。我使用 while 循环不断减去 20,直到差异不再大于 20。
使用数字作为问候语数组的索引 GreetingDetails[diff]
.
这是基于您的问候语的示例(广告有效)代码。您选择一个日期(未来的当前日期)。
首先让我感谢所有回复的人。你的洞察力帮助我弄清楚我做错了什么。
我在 Nawed Khan 和 Ferenc 的回复中找到了答案。我认为需要一些年和月的数学运算,但想不出要使用的公式。我在 Khan 的 monthDiff() 方法中使用了公式,因为我更喜欢它而不是将公式分成两部分。
var diff = todayDate.getMonth() - startDate.getMonth() + (12 * (todayDate.getFullYear() - startDate.getFullYear()));
完成后,就像他在回答中所做的那样,我将 diff 指定为 GreetingDetails 索引...GreetingDetails[diff] 和中提琴,奇迹发生了。有一段时间效果很好……直到我过了 20 年,然后我开始收到错误的问候。问题出在 Khan 的响应中的 while 循环中。所以我把它改成减去GreetingDetails.length(长度为20),我每次都得到正确的问候语。
while (diff >= GreetingDetails.length) {
diff -= GreetingDetails.length;
}
如果 GreetingDetails[] 中的问候数量发生变化,这也会在以后提供帮助。我需要它尽可能地动态,所以这应该是实现它的最佳方式。这样,只需要更改问候语细节,其他都不需要。
虽然 Khan 和 Ferenc 在公式中略有不同,但我在使用他们的回复来制定我的问题的解决方案时对他们进行投票以给予他们信任。
下面是完整的 JS:
var todayDate = new Date();
var startDate = new Date(2020, 0)
var diff = todayDate.getMonth() - startDate.getMonth() + (12 * (todayDate.getFullYear() - startDate.getFullYear()));
var link = "url";
var GreetingBuilder;
var GreetingDetails = [
{// index0
Greeting: "Foreign Greeting 0",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation0.mp3",
CommerceLink: link
}, // index0
{// index1
Greeting: "Foreign Greeting 1",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation1.mp3",
CommerceLink: link
}, // index1
{// index2
Greeting: "Foreign Greeting 2",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation2.mp3",
CommerceLink: link
}, // index2
{// index3
Greeting: "Foreign Greeting 3",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation3.mp3",
CommerceLink: link
}, // index3
{// index4
Greeting: "Foreign Greeting 4",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation4.mp3",
CommerceLink: link
}, // index4
{// index5
Greeting: "Foreign Greeting 5",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation5.mp3",
CommerceLink: link
}, // index5
{// index6
Greeting: "Foreign Greeting 6",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation6.mp3",
CommerceLink: link
}, // index6
{// index7
Greeting: "Foreign Greeting 7",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation7.mp3",
CommerceLink: link
}, // index7
{// index8
Greeting: "Foreign Greeting 8",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation8.mp3",
CommerceLink: link
}, // index8
{// index9
Greeting: "Foreign Greeting 9",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation9.mp3",
CommerceLink: link
}, // index9
{// index10
Greeting: "Foreign Greeting 10",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation10.mp3",
CommerceLink: link
}, // index10
{// index11
Greeting: "Foreign Greeting 11",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation11.mp3",
CommerceLink: link
}, // index11
{// index12
Greeting: "Foreign Greeting 12",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation12.mp3",
CommerceLink: link
}, // index12
{// index13
Greeting: "Foreign Greeting 13",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation13.mp3",
CommerceLink: link
}, // index13
{// index14
Greeting: "Foreign Greeting 14",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation14.mp3",
CommerceLink: link
}, // index14
{// index15
Greeting: "Foreign Greeting 15",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation15.mp3",
CommerceLink: link
}, // index15
{// index16
Greeting: "Foreign Greeting 16",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation16.mp3",
CommerceLink: link
}, // index16
{// index17
Greeting: "Foreign Greeting 17",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation17.mp3",
CommerceLink: link
}, // index17
{// index18
Greeting: "Foreign Greeting 18",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation18.mp3",
CommerceLink: link
}, // index18
{// index19
Greeting: "Foreign Greeting 19",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation19.mp3",
CommerceLink: link
} // index19
];
while (diff >= GreetingDetails.length) {
diff -= GreetingDetails.length;
}
GreetingElements = {
topSection: function () {
var holder = document.createElement("section");
holder.id = "required-greeting";
return holder;
},
accessabilityP: function () {
var holder = document.createElement("p");
holder.classList.add("visuallyhidden");
holder.innerText = "The following is a greeting given in one of 20 foreign languages.";
return holder;
},
greetingContainer: function () {
var holder = document.createElement("dl");
holder.id = "language-greeting";
return holder;
},
greetingDT: function () {
var holder = document.createElement("dt");
holder.classList.add("greeting");
return holder;
},
greetingLink: function () {
var holder = document.createElement("a")
holder.href = GreetingBuilder.CommerceLink;
holder.classList.add("language-link");
holder.text = GreetingBuilder.Greeting;
return holder;
},
audioContainer: function () {
var holder = document.createElement("dd");
holder.classList.add("speaker");
return holder;
},
audioPlayer: function () {
var holder = document.createElement("audio");
holder.id = GreetingBuilder.Language.toLowerCase().replace(" ", "-");
holder.src = GreetingBuilder.AudioPath;
holder.preload = "auto";
return holder;
},
audioButton: function () {
var holder = document.createElement("button");
holder.classList.add("pronunciation");
holder.onclick = function () {
document.getElementById(GreetingElements.audioPlayer().id).play();
};
holder.innerText = "Listen to pronunciation";
return holder;
},
languageNameDD: function () {
var holder = document.createElement("dd");
holder.classList.add("language");
holder.innerText = "(" + GreetingBuilder.Language + ")";
return holder;
},
languageTranslationDD: function () {
var holder = document.createElement("dd");
holder.classList.add("translation");
holder.innerText = '"' + GreetingBuilder.Translation + '"';
return holder;
},
getFullGreetingSection: function () {
var sectionInstance = this.topSection();
var greetingDTInstance = this.greetingDT();
var greetingContainerInstance = this.greetingContainer();
var audioContainerInstance = this.audioContainer();
greetingDTInstance.appendChild(this.greetingLink());
greetingContainerInstance.appendChild(greetingDTInstance);
audioContainerInstance.appendChild(this.audioPlayer());
audioContainerInstance.appendChild(this.audioButton());
greetingContainerInstance.appendChild(audioContainerInstance);
greetingContainerInstance.appendChild(this.languageNameDD());
greetingContainerInstance.appendChild(this.languageTranslationDD());
sectionInstance.appendChild(this.accessabilityP());
sectionInstance.appendChild(greetingContainerInstance);
return sectionInstance;
}
}
GreetingBuilder = GreetingDetails[diff];
document.getElementsByClassName("back-to-top")[0].insertAdjacentElement('afterend', GreetingElements.getFullGreetingSection());
我希望这对以后的人有所帮助!
我希望有人能帮我解决这个问题。我正在写一个 JavaScript 以在问候语重新开始之前连续 20 个月每月显示 20 条问候语之一。下面是 GreetingDetails 数组:
var GreetingDetails = [
{// index0
Greeting: "Foreign Greeting 0",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation0.mp3",
CommerceLink: link
}, // index0
{// index1
Greeting: "Foreign Greeting 1",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation1.mp3",
CommerceLink: link
}, // index1
{// index2
Greeting: "Foreign Greeting 2",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation2.mp3",
CommerceLink: link
}, // index2
{// index3
Greeting: "Foreign Greeting 3",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation3.mp3",
CommerceLink: link
}, // index3
{// index4
Greeting: "Foreign Greeting 4",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation4.mp3",
CommerceLink: link
}, // index4
{// index5
Greeting: "Foreign Greeting 5",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation5.mp3",
CommerceLink: link
}, // index5
{// index6
Greeting: "Foreign Greeting 6",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation6.mp3",
CommerceLink: link
}, // index6
{// index7
Greeting: "Foreign Greeting 7",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation7.mp3",
CommerceLink: link
}, // index7
{// index8
Greeting: "Foreign Greeting 8",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation8.mp3",
CommerceLink: link
}, // index8
{// index9
Greeting: "Foreign Greeting 9",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation9.mp3",
CommerceLink: link
}, // index9
{// index10
Greeting: "Foreign Greeting 10",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation10.mp3",
CommerceLink: link
}, // index10
{// index11
Greeting: "Foreign Greeting 11",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation11.mp3",
CommerceLink: link
}, // index11
{// index12
Greeting: "Foreign Greeting 12",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation12.mp3",
CommerceLink: link
}, // index12
{// index13
Greeting: "Foreign Greeting 13",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation13.mp3",
CommerceLink: link
}, // index13
{// index14
Greeting: "Foreign Greeting 14",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation14.mp3",
CommerceLink: link
}, // index14
{// index15
Greeting: "Foreign Greeting 15",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation15.mp3",
CommerceLink: link
}, // index15
{// index16
Greeting: "Foreign Greeting 16",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation16.mp3",
CommerceLink: link
}, // index16
{// index17
Greeting: "Foreign Greeting 17",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation17.mp3",
CommerceLink: link
}, // index17
{// index18
Greeting: "Foreign Greeting 18",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation18.mp3",
CommerceLink: link
}, // index18
{// index19
Greeting: "Foreign Greeting 19",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation19.mp3",
CommerceLink: link
} // index19
];
我尝试了几种不同的方法,测试得到每个问候语,但继续 运行 解决只得到 12. 12 的问题,因为一年有 12 个月,我正在检查在 for 循环中进行比较的月份。我想让它尽可能动态,这样就没有人需要再次触摸了。这是我最成功的日期比较尝试:
var m = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September','October', 'November', 'December'];
var y = [];
var d = new Date();
//var test = new Date(2020, 1, 1);
// This for loop adds the years to the y-array
for (var i = 0; i < addYears; i++) {
y.push(startYear++);
}
//alert(m.length);
//alert(y.length);
for (var i = 0; i < y.length; i++) {
if (d.getFullYear() === y[i]) {
for (var j = 0; j < GreetingDetails.length; j++) {
if (m[d.getMonth()] === m[j]) {
GreetingBuilder = GreetingDetails[j];
}
}
}
}
var GreetingBuilder;
GreetingElements = {
topSection: function () {
var holder = document.createElement("section");
holder.id = "required-greeting";
return holder;
},
accessabilityP: function () {
var holder = document.createElement("p");
holder.classList.add("visuallyhidden");
holder.innerText = "The following is a greeting given in one of 20 foreign languages.";
return holder;
},
greetingContainer: function () {
var holder = document.createElement("dl");
holder.id = "language-greeting";
return holder;
},
greetingDT: function () {
var holder = document.createElement("dt");
holder.classList.add("greeting");
return holder;
},
greetingLink: function () {
var holder = document.createElement("a")
holder.href = GreetingBuilder.CommerceLink;
holder.classList.add("language-link");
holder.text = GreetingBuilder.Greeting;
return holder;
},
audioContainer: function () {
var holder = document.createElement("dd");
holder.classList.add("speaker");
return holder;
},
audioPlayer: function () {
var holder = document.createElement("audio");
holder.id = GreetingBuilder.Language.toLowerCase().replace(" ", "-");
holder.src = GreetingBuilder.AudioPath;
holder.preload = "auto";
return holder;
},
audioButton: function () {
var holder = document.createElement("button");
holder.classList.add("pronunciation");
holder.onclick = function () {
document.getElementById(GreetingElements.audioPlayer().id).play();
};
holder.innerText = "Listen to pronunciation";
return holder;
},
languageNameDD: function () {
var holder = document.createElement("dd");
holder.classList.add("language");
holder.innerText = "(" + GreetingBuilder.Language + ")";
return holder;
},
languageTranslationDD: function () {
var holder = document.createElement("dd");
holder.classList.add("translation");
holder.innerText = '"' + GreetingBuilder.Translation + '"';
return holder;
},
getFullGreetingSection: function () {
var sectionInstance = this.topSection();
var greetingDTInstance = this.greetingDT();
var greetingContainerInstance = this.greetingContainer();
var audioContainerInstance = this.audioContainer();
greetingDTInstance.appendChild(this.greetingLink());
greetingContainerInstance.appendChild(greetingDTInstance);
audioContainerInstance.appendChild(this.audioPlayer());
audioContainerInstance.appendChild(this.audioButton());
greetingContainerInstance.appendChild(audioContainerInstance);
greetingContainerInstance.appendChild(this.languageNameDD());
greetingContainerInstance.appendChild(this.languageTranslationDD());
sectionInstance.appendChild(this.accessabilityP());
sectionInstance.appendChild(greetingContainerInstance);
return sectionInstance;
}
}
document.getElementsByClassName("back-to-top")[0].insertAdjacentElement('afterend', GreetingElements.getFullGreetingSection());
如果您发现我做错了什么,请告诉我。我确信有更好的方法来解决这个问题,因此我们将不胜感激。
只有 12 个月所以只有 12 个唯一值可以使用但需要 20 个?使用年份!
2020 = 0
2021 = 1
所以你的第 13 个月是 2021 年 1 月,或者 12+1 等等。
用当前年份减去 2020 年。将其添加到当前月份。将值包装在 0 和 19 之间。
指定一个可以计算月份的过去日期。然后,取从那时起经过的月份,并 mod 它乘以你的问候语数组的长度。
尝试调整"pastDate"来模拟时间的流逝,得到不同的问候。
var greetings = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19].map (x=> "Greeting #" + x);
var currentDate = new Date();
var pastDate = new Date("2018-10-01"); // pick arbitrary point in past as the "first" month
var differenceInYears = currentDate.getYear() - pastDate.getYear(); // 20 years ago
var index = differenceInYears * 12 + currentDate.getMonth() - pastDate.getMonth(); // how many months ago we "started" counting
console.log(greetings[index%greetings.length]);
var basedate = new Date(2020, 00);
function monthDiff(dateFrom, dateTo) {
return dateTo.getMonth() - dateFrom.getMonth() +
(12 * (dateTo.getFullYear() - dateFrom.getFullYear()))
}
function showmessage() {
var curdate = new Date($('#curdate').val());
var diff = monthDiff(basedate, curdate);
while(diff > 19){
diff = diff - 19;
}
$('#output').append('<div>Greeting: ' + GreetingDetails[diff].Greeting + '</div>');
}
var link = '';
var GreetingDetails = [{ // index0
Greeting: "Foreign Greeting 0",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation0.mp3",
CommerceLink: link
}, // index0
{ // index1
Greeting: "Foreign Greeting 1",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation1.mp3",
CommerceLink: link
}, // index1
{ // index2
Greeting: "Foreign Greeting 2",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation2.mp3",
CommerceLink: link
}, // index2
{ // index3
Greeting: "Foreign Greeting 3",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation3.mp3",
CommerceLink: link
}, // index3
{ // index4
Greeting: "Foreign Greeting 4",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation4.mp3",
CommerceLink: link
}, // index4
{ // index5
Greeting: "Foreign Greeting 5",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation5.mp3",
CommerceLink: link
}, // index5
{ // index6
Greeting: "Foreign Greeting 6",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation6.mp3",
CommerceLink: link
}, // index6
{ // index7
Greeting: "Foreign Greeting 7",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation7.mp3",
CommerceLink: link
}, // index7
{ // index8
Greeting: "Foreign Greeting 8",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation8.mp3",
CommerceLink: link
}, // index8
{ // index9
Greeting: "Foreign Greeting 9",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation9.mp3",
CommerceLink: link
}, // index9
{ // index10
Greeting: "Foreign Greeting 10",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation10.mp3",
CommerceLink: link
}, // index10
{ // index11
Greeting: "Foreign Greeting 11",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation11.mp3",
CommerceLink: link
}, // index11
{ // index12
Greeting: "Foreign Greeting 12",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation12.mp3",
CommerceLink: link
}, // index12
{ // index13
Greeting: "Foreign Greeting 13",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation13.mp3",
CommerceLink: link
}, // index13
{ // index14
Greeting: "Foreign Greeting 14",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation14.mp3",
CommerceLink: link
}, // index14
{ // index15
Greeting: "Foreign Greeting 15",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation15.mp3",
CommerceLink: link
}, // index15
{ // index16
Greeting: "Foreign Greeting 16",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation16.mp3",
CommerceLink: link
}, // index16
{ // index17
Greeting: "Foreign Greeting 17",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation17.mp3",
CommerceLink: link
}, // index17
{ // index18
Greeting: "Foreign Greeting 18",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation18.mp3",
CommerceLink: link
}, // index18
{ // index19
Greeting: "Foreign Greeting 19",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation19.mp3",
CommerceLink: link
} // index19
];
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type='date' id="curdate" />
<button type="button" onclick='showmessage()'>Show</button>
<div id="output">
</div>
你需要一个基准日期来决定哪个月份是0。
然后你需要今天的月份和基准月份之间的月份差。
如果差异大于 20,则减去 20。我使用 while 循环不断减去 20,直到差异不再大于 20。
使用数字作为问候语数组的索引 GreetingDetails[diff]
.
这是基于您的问候语的示例(广告有效)代码。您选择一个日期(未来的当前日期)。
首先让我感谢所有回复的人。你的洞察力帮助我弄清楚我做错了什么。
我在 Nawed Khan 和 Ferenc 的回复中找到了答案。我认为需要一些年和月的数学运算,但想不出要使用的公式。我在 Khan 的 monthDiff() 方法中使用了公式,因为我更喜欢它而不是将公式分成两部分。
var diff = todayDate.getMonth() - startDate.getMonth() + (12 * (todayDate.getFullYear() - startDate.getFullYear()));
完成后,就像他在回答中所做的那样,我将 diff 指定为 GreetingDetails 索引...GreetingDetails[diff] 和中提琴,奇迹发生了。有一段时间效果很好……直到我过了 20 年,然后我开始收到错误的问候。问题出在 Khan 的响应中的 while 循环中。所以我把它改成减去GreetingDetails.length(长度为20),我每次都得到正确的问候语。
while (diff >= GreetingDetails.length) {
diff -= GreetingDetails.length;
}
如果 GreetingDetails[] 中的问候数量发生变化,这也会在以后提供帮助。我需要它尽可能地动态,所以这应该是实现它的最佳方式。这样,只需要更改问候语细节,其他都不需要。
虽然 Khan 和 Ferenc 在公式中略有不同,但我在使用他们的回复来制定我的问题的解决方案时对他们进行投票以给予他们信任。
下面是完整的 JS:
var todayDate = new Date();
var startDate = new Date(2020, 0)
var diff = todayDate.getMonth() - startDate.getMonth() + (12 * (todayDate.getFullYear() - startDate.getFullYear()));
var link = "url";
var GreetingBuilder;
var GreetingDetails = [
{// index0
Greeting: "Foreign Greeting 0",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation0.mp3",
CommerceLink: link
}, // index0
{// index1
Greeting: "Foreign Greeting 1",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation1.mp3",
CommerceLink: link
}, // index1
{// index2
Greeting: "Foreign Greeting 2",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation2.mp3",
CommerceLink: link
}, // index2
{// index3
Greeting: "Foreign Greeting 3",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation3.mp3",
CommerceLink: link
}, // index3
{// index4
Greeting: "Foreign Greeting 4",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation4.mp3",
CommerceLink: link
}, // index4
{// index5
Greeting: "Foreign Greeting 5",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation5.mp3",
CommerceLink: link
}, // index5
{// index6
Greeting: "Foreign Greeting 6",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation6.mp3",
CommerceLink: link
}, // index6
{// index7
Greeting: "Foreign Greeting 7",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation7.mp3",
CommerceLink: link
}, // index7
{// index8
Greeting: "Foreign Greeting 8",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation8.mp3",
CommerceLink: link
}, // index8
{// index9
Greeting: "Foreign Greeting 9",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation9.mp3",
CommerceLink: link
}, // index9
{// index10
Greeting: "Foreign Greeting 10",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation10.mp3",
CommerceLink: link
}, // index10
{// index11
Greeting: "Foreign Greeting 11",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation11.mp3",
CommerceLink: link
}, // index11
{// index12
Greeting: "Foreign Greeting 12",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation12.mp3",
CommerceLink: link
}, // index12
{// index13
Greeting: "Foreign Greeting 13",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation13.mp3",
CommerceLink: link
}, // index13
{// index14
Greeting: "Foreign Greeting 14",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation14.mp3",
CommerceLink: link
}, // index14
{// index15
Greeting: "Foreign Greeting 15",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation15.mp3",
CommerceLink: link
}, // index15
{// index16
Greeting: "Foreign Greeting 16",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation16.mp3",
CommerceLink: link
}, // index16
{// index17
Greeting: "Foreign Greeting 17",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation17.mp3",
CommerceLink: link
}, // index17
{// index18
Greeting: "Foreign Greeting 18",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation18.mp3",
CommerceLink: link
}, // index18
{// index19
Greeting: "Foreign Greeting 19",
Language: "Foreign Language",
Translation: "English Translation",
AudioPath: "/Content/Greetings/Pronunciation19.mp3",
CommerceLink: link
} // index19
];
while (diff >= GreetingDetails.length) {
diff -= GreetingDetails.length;
}
GreetingElements = {
topSection: function () {
var holder = document.createElement("section");
holder.id = "required-greeting";
return holder;
},
accessabilityP: function () {
var holder = document.createElement("p");
holder.classList.add("visuallyhidden");
holder.innerText = "The following is a greeting given in one of 20 foreign languages.";
return holder;
},
greetingContainer: function () {
var holder = document.createElement("dl");
holder.id = "language-greeting";
return holder;
},
greetingDT: function () {
var holder = document.createElement("dt");
holder.classList.add("greeting");
return holder;
},
greetingLink: function () {
var holder = document.createElement("a")
holder.href = GreetingBuilder.CommerceLink;
holder.classList.add("language-link");
holder.text = GreetingBuilder.Greeting;
return holder;
},
audioContainer: function () {
var holder = document.createElement("dd");
holder.classList.add("speaker");
return holder;
},
audioPlayer: function () {
var holder = document.createElement("audio");
holder.id = GreetingBuilder.Language.toLowerCase().replace(" ", "-");
holder.src = GreetingBuilder.AudioPath;
holder.preload = "auto";
return holder;
},
audioButton: function () {
var holder = document.createElement("button");
holder.classList.add("pronunciation");
holder.onclick = function () {
document.getElementById(GreetingElements.audioPlayer().id).play();
};
holder.innerText = "Listen to pronunciation";
return holder;
},
languageNameDD: function () {
var holder = document.createElement("dd");
holder.classList.add("language");
holder.innerText = "(" + GreetingBuilder.Language + ")";
return holder;
},
languageTranslationDD: function () {
var holder = document.createElement("dd");
holder.classList.add("translation");
holder.innerText = '"' + GreetingBuilder.Translation + '"';
return holder;
},
getFullGreetingSection: function () {
var sectionInstance = this.topSection();
var greetingDTInstance = this.greetingDT();
var greetingContainerInstance = this.greetingContainer();
var audioContainerInstance = this.audioContainer();
greetingDTInstance.appendChild(this.greetingLink());
greetingContainerInstance.appendChild(greetingDTInstance);
audioContainerInstance.appendChild(this.audioPlayer());
audioContainerInstance.appendChild(this.audioButton());
greetingContainerInstance.appendChild(audioContainerInstance);
greetingContainerInstance.appendChild(this.languageNameDD());
greetingContainerInstance.appendChild(this.languageTranslationDD());
sectionInstance.appendChild(this.accessabilityP());
sectionInstance.appendChild(greetingContainerInstance);
return sectionInstance;
}
}
GreetingBuilder = GreetingDetails[diff];
document.getElementsByClassName("back-to-top")[0].insertAdjacentElement('afterend', GreetingElements.getFullGreetingSection());
我希望这对以后的人有所帮助!