做了最好的研究,我在 JavaScript 中找不到答案,但我發現這個解決方案在 python 中完美運行
import datetime
def most_frequent_days(year):
days = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')
most = sorted(list(set([datetime.date(year, 1, 1).weekday() ,datetime.date(year, 12, 31).weekday()])))
return [days[i] for i in most]
print(most_frequent_days(212))
現在嘗試將其轉換為 JavaScript,您需要了解 python(我知道如何處理 python)我想出的最好的東西
const mostFrequentDays = year => {
function getDayOfWeek(date) {
const dayOfWeek = new Date(date).getDay();
return isNaN(dayOfWeek) ? null :
['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][dayOfWeek];
}
//let days = [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ]
let most = [getDayOfWeek(`${year}-1-1`), getDayOfWeek(`${year}-12-31`)].sort()
let mySet = [...new Set(most)]
//let sorted = mySet;
let i = 0;
let data = [];
while (i < mySet.length) {
data = [ ...data, mySet[i] ]
i ;
}
return data;
};
現在這適用于 JS,但是當我嘗試使用我構建的函式時,我
mostFrequentDays(212)沒有得到預期的輸出
**給你一個整數年。回傳該年一周中最頻繁的日子。生成的日期串列應從星期一開始按星期幾的順序排序(例如 ['Monday', 'Tuesday'])。**
測驗
it("should handle basic tests", () => {
assert.deepEqual(mostFrequentDays(2427), ["Friday"]);
assert.deepEqual(mostFrequentDays(2185), ["Saturday"]);
assert.deepEqual(mostFrequentDays(1084), ["Tuesday", "Wednesday"]);
assert.deepEqual(mostFrequentDays(1167), ["Sunday"]);
assert.deepEqual(mostFrequentDays(1216), ["Friday", "Saturday"]);
assert.deepEqual(mostFrequentDays(1492), ["Friday", "Saturday"]);
assert.deepEqual(mostFrequentDays(1770), ["Monday"]);
assert.deepEqual(mostFrequentDays(1785), ["Saturday"]);
assert.deepEqual(mostFrequentDays(212), ["Wednesday", "Thursday"]);
});
當我將 python 代碼轉換為 JS 時,它們中的很多都可以作業,除了最后一個,因為 JS 日期在212 年不起作用
Please help me make a function that can pass all the tests, there are a lot of python versions of the solution but the one I used is the easy one, and in python, that code works because the DateTime in python work on a date like 212. Or maybe if you know a better version that's not originally from python, how would you implement a solution for JS
Thank you, Best regards.
uj5u.com熱心網友回復:
您需要定義“不起作用”。
非閏年有 365 天,即 52 周加 1 天。因此,無論哪一天是一年中的第一天,都會出現 53 次,而其他所有天都會出現 52 次。所以最頻繁的是 1 月 1 日的作業日。
對于閏年,第一天和第二天將出現 53 次,其他 52 天。例如,2018 年 1 月 1 日是星期一,12 月 31 日是星期一,因此有 53 個星期一和其他 52 個星期一。2020 年 1 月 1 日是星期三和閏年,12 月 31 日是星期四,因此 53 個星期三和星期四以及其余 52 個。
當然,隨機的日期范圍會使生活變得更加困難。
實作上述功能的功能是:
function mostFrequentDaysOfYear(year = new Date().getFullYear()) {
// 1 Jan
let d = new Date(year, 0);
// Weekday name for 1 Jan
let mostFrequent = [d.toLocaleString('en',{weekday:'long'})];
let isLeap = new Date(year, 1, 29).getDate() == 29;
// If leap year, add next day's name too
if (isLeap) {
d.setDate(d.getDate() 1);
mostFrequent.push(d.toLocaleString('en',{weekday:'long'}))
}
return mostFrequent;
}
// Examples
[2018, 2020, 2022, 212].forEach(year => console.log(
`${year}: ${mostFrequentDaysOfYear(year)}`
));
另一種演算法(這是 PHP 代碼正在做的)是檢查 1 月 1 日和 12 月 31 日是否是同一天。如果是,請當天回傳。如果沒有,請兩天回傳。
唯一需要的排序是閏年從星期日開始的地方。默認回傳是 [Sunday, Monday] 但在特定情況下要求是 [Monday, Sunday]。
因此,如果 1 月 1 日是星期日(第 0 天),則反轉日期串列,例如
function mostFrequentDaysOfYear(year = new Date().getFullYear()) {
let dayName = d => d.toLocaleString('en',{weekday:'long'});
// 1 Jan
let d = new Date(year, 0, 1);
let d0 = dayName(d);
// 31 Dec
let d1 = dayName(new Date(year, 11, 31));
let result = d0 == d1? [d0] : [d0, d1];
// If d0 is Sunday, reverse result
return d.getDay()? result : result.reverse();
}
[2427, // Friday
2185, // Saturday
1084, // Tuesday, Wednesday
1167, // Sunday
1216, // Friday, Saturday
1492, // Friday, Saturday
1770, // Monday
1785, // Saturday
2040, // Monday, Sunday - leap year starting on Sun
212 // Wednesday, Thursday
].forEach(year => console.log(
`${year}: ${mostFrequentDaysOfYear(year)}`
));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/452703.html
標籤:javascript python python-3.x typescript datetime
下一篇:在python中獲取GMT時間戳
