Question

I need to calculate the total number of weeks in a year in a culture-aware manner. So far I only found solutions that counted the number of days in a year (365/366) and divided it by 7. That is simply wrong because the year can begin in the last day of a week but that would still account for a week.

I am curios if there is support for this in .NET


Later edit : here's why the "365/7" doesn't work :

enter image description here

Notice how the first week starts on a Wednesday (Mi is short for Miercuri - Wednesday in Romanian). Using the 365/7 method these 5 days would count for 0.7 weeks whereas I need to have them counted as one week.

Was it helpful?

Solution

This should work:

public static int GetWeeksInYearIso8601(int year, CultureInfo ci)
{
    var lastDay = new DateTime(year, 12, 31);
    DayOfWeek day = ci.Calendar.GetDayOfWeek(lastDay);
    DateTimeFormatInfo dtf = ci.DateTimeFormat;
    if (dtf.CalendarWeekRule == CalendarWeekRule.FirstFourDayWeek)
    {
        if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday)
        {
            lastDay = lastDay.AddDays(-7);
        }
    }
    else if (dtf.CalendarWeekRule == CalendarWeekRule.FirstFullWeek)
    {
        if (day > dtf.FirstDayOfWeek)
        {
            lastDay = lastDay.AddDays(-7);
        }
    }

    return ci.Calendar.GetWeekOfYear(lastDay, dtf.CalendarWeekRule, dtf.FirstDayOfWeek);
}

Example:

var germanSampleCulture = CultureInfo.CreateSpecificCulture("de-DE");
int weeksInYear = GetWeeksInYearIso8601(2013, germanSampleCulture);  // 52

Test with all cultures:

CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);
foreach (CultureInfo culture in cultures)
{
    Console.WriteLine("Culture: {0} ({1}) Weeks: {2}", 
                culture.DisplayName,
                culture.ToString(),
                GetWeeksInYearIso8601(2013, culture));
}

Output:

Culture: Bulgarian (bg) Weeks: 53
Culture: Catalan (ca) Weeks: 53
Culture: Chinese (Simplified) (zh-Hans) Weeks: 53
Culture: Czech (cs) Weeks: 53
Culture: Danish (da) Weeks: 52
Culture: German (de) Weeks: 52
Culture: Greek (el) Weeks: 53
Culture: English (en) Weeks: 53
Culture: Spanish (es) Weeks: 53
Culture: Finnish (fi) Weeks: 52
Culture: French (fr) Weeks: 53
Culture: Hebrew (he) Weeks: 53
Culture: Hungarian (hu) Weeks: 53
Culture: Icelandic (is) Weeks: 52
Culture: Italian (it) Weeks: 52
Culture: Japanese (ja) Weeks: 53
Culture: Korean (ko) Weeks: 53
Culture: Dutch (nl) Weeks: 52
Culture: Norwegian (no) Weeks: 52
Culture: Polish (pl) Weeks: 52
Culture: Portuguese (pt) Weeks: 53
Culture: Romansh (rm) Weeks: 52
Culture: Romanian (ro) Weeks: 53
Culture: Russian (ru) Weeks: 53
Culture: Croatian (hr) Weeks: 53
Culture: Slovak (sk) Weeks: 53
Culture: Albanian (sq) Weeks: 53
Culture: Swedish (sv) Weeks: 52
Culture: Thai (th) Weeks: 53
Culture: Turkish (tr) Weeks: 53
Culture: Urdu (ur) Weeks: 52
Culture: Indonesian (id) Weeks: 53
Culture: Ukrainian (uk) Weeks: 53
Culture: Belarusian (be) Weeks: 53
Culture: Slovenian (sl) Weeks: 53
Culture: Estonian (et) Weeks: 52
Culture: Latvian (lv) Weeks: 52
Culture: Lithuanian (lt) Weeks: 53
Culture: Tajik (tg) Weeks: 53
Culture: Persian (fa) Weeks: 53
Culture: Vietnamese (vi) Weeks: 53
Culture: Armenian (hy) Weeks: 53
Culture: Azeri (az) Weeks: 53
Culture: Basque (eu) Weeks: 53
Culture: Upper Sorbian (hsb) Weeks: 52
Culture: Macedonian (FYROM) (mk) Weeks: 52
Culture: Setswana (tn) Weeks: 53
Culture: isiXhosa (xh) Weeks: 53
Culture: isiZulu (zu) Weeks: 53
Culture: Afrikaans (af) Weeks: 53
Culture: Georgian (ka) Weeks: 53
Culture: Faroese (fo) Weeks: 52
Culture: Hindi (hi) Weeks: 53
Culture: Maltese (mt) Weeks: 53
Culture: Sami (Northern) (se) Weeks: 52
Culture: Irish (ga) Weeks: 53
Culture: Malay (ms) Weeks: 53
Culture: Kazakh (kk) Weeks: 53
Culture: Kyrgyz (ky) Weeks: 53
Culture: Kiswahili (sw) Weeks: 53
Culture: Turkmen (tk) Weeks: 53
Culture: Uzbek (uz) Weeks: 53
Culture: Tatar (tt) Weeks: 53
Culture: Bengali (bn) Weeks: 53
Culture: Punjabi (pa) Weeks: 53
Culture: Gujarati (gu) Weeks: 53
Culture: Oriya (or) Weeks: 53
Culture: Tamil (ta) Weeks: 53
Culture: Telugu (te) Weeks: 53
Culture: Kannada (kn) Weeks: 53
Culture: Malayalam (ml) Weeks: 53
Culture: Assamese (as) Weeks: 52
Culture: Marathi (mr) Weeks: 53
Culture: Sanskrit (sa) Weeks: 53
Culture: Mongolian (mn) Weeks: 53
Culture: Tibetan (bo) Weeks: 53
Culture: Welsh (cy) Weeks: 53
Culture: Khmer (km) Weeks: 52
Culture: Lao (lo) Weeks: 53
Culture: Galician (gl) Weeks: 53
Culture: Konkani (kok) Weeks: 53
Culture: Syriac (syr) Weeks: 53
Culture: Sinhala (si) Weeks: 53
Culture: Inuktitut (iu) Weeks: 53
Culture: Amharic (am) Weeks: 53
Culture: Tamazight (tzm) Weeks: 53
Culture: Nepali (ne) Weeks: 53
Culture: Frisian (fy) Weeks: 52
Culture: Filipino (fil) Weeks: 53
Culture: Hausa (ha) Weeks: 53
Culture: Yoruba (yo) Weeks: 53
Culture: Quechua (quz) Weeks: 53
Culture: Sesotho sa Leboa (nso) Weeks: 53
Culture: Bashkir (ba) Weeks: 53
Culture: Luxembourgish (lb) Weeks: 53
Culture: Greenlandic (kl) Weeks: 52
Culture: Igbo (ig) Weeks: 53
Culture: Yi (ii) Weeks: 53
Culture: Mapudungun (arn) Weeks: 53
Culture: Mohawk (moh) Weeks: 53
Culture: Breton (br) Weeks: 53
Culture: Invariant Language (Invariant Country) () Weeks: 53
Culture: Uyghur (ug) Weeks: 53
Culture: Maori (mi) Weeks: 53
Culture: Occitan (oc) Weeks: 53
Culture: Corsican (co) Weeks: 53
Culture: Alsatian (gsw) Weeks: 53
Culture: Yakut (sah) Weeks: 53
Culture: K'iche (qut) Weeks: 53
Culture: Kinyarwanda (rw) Weeks: 53
Culture: Wolof (wo) Weeks: 53
Culture: Scottish Gaelic (gd) Weeks: 53
Culture: Bulgarian (Bulgaria) (bg-BG) Weeks: 53
Culture: Catalan (Catalan) (ca-ES) Weeks: 53
Culture: Chinese (Traditional, Taiwan) (zh-TW) Weeks: 53
Culture: Czech (Czech Republic) (cs-CZ) Weeks: 53
Culture: Danish (Denmark) (da-DK) Weeks: 52
Culture: German (Germany) (de-DE) Weeks: 52
Culture: Greek (Greece) (el-GR) Weeks: 53
Culture: English (United States) (en-US) Weeks: 53
Culture: Finnish (Finland) (fi-FI) Weeks: 52
Culture: French (France) (fr-FR) Weeks: 53
Culture: Hebrew (Israel) (he-IL) Weeks: 53
Culture: Hungarian (Hungary) (hu-HU) Weeks: 53
Culture: Icelandic (Iceland) (is-IS) Weeks: 52
Culture: Italian (Italy) (it-IT) Weeks: 52
Culture: Japanese (Japan) (ja-JP) Weeks: 53
Culture: Korean (Korea) (ko-KR) Weeks: 53
Culture: Dutch (Netherlands) (nl-NL) Weeks: 52
Culture: Norwegian, Bokmål (Norway) (nb-NO) Weeks: 52
Culture: Polish (Poland) (pl-PL) Weeks: 52
Culture: Portuguese (Brazil) (pt-BR) Weeks: 53
Culture: Romansh (Switzerland) (rm-CH) Weeks: 52
Culture: Romanian (Romania) (ro-RO) Weeks: 53
Culture: Russian (Russia) (ru-RU) Weeks: 53
Culture: Croatian (Croatia) (hr-HR) Weeks: 53
Culture: Slovak (Slovakia) (sk-SK) Weeks: 53
Culture: Albanian (Albania) (sq-AL) Weeks: 53
Culture: Swedish (Sweden) (sv-SE) Weeks: 52
Culture: Thai (Thailand) (th-TH) Weeks: 53
Culture: Turkish (Turkey) (tr-TR) Weeks: 53
Culture: Urdu (Islamic Republic of Pakistan) (ur-PK) Weeks: 52
Culture: Indonesian (Indonesia) (id-ID) Weeks: 53
Culture: Ukrainian (Ukraine) (uk-UA) Weeks: 53
Culture: Belarusian (Belarus) (be-BY) Weeks: 53
Culture: Slovenian (Slovenia) (sl-SI) Weeks: 53
Culture: Estonian (Estonia) (et-EE) Weeks: 52
Culture: Latvian (Latvia) (lv-LV) Weeks: 52
Culture: Lithuanian (Lithuania) (lt-LT) Weeks: 53
Culture: Tajik (Cyrillic, Tajikistan) (tg-Cyrl-TJ) Weeks: 53
Culture: Persian (fa-IR) Weeks: 53
Culture: Vietnamese (Vietnam) (vi-VN) Weeks: 53
Culture: Armenian (Armenia) (hy-AM) Weeks: 53
Culture: Azeri (Latin, Azerbaijan) (az-Latn-AZ) Weeks: 53
Culture: Basque (Basque) (eu-ES) Weeks: 53
Culture: Upper Sorbian (Germany) (hsb-DE) Weeks: 52
Culture: Macedonian (Former Yugoslav Republic of Macedonia) (mk-MK) Weeks: 52
Culture: Setswana (South Africa) (tn-ZA) Weeks: 53
Culture: isiXhosa (South Africa) (xh-ZA) Weeks: 53
Culture: isiZulu (South Africa) (zu-ZA) Weeks: 53
Culture: Afrikaans (South Africa) (af-ZA) Weeks: 53
Culture: Georgian (Georgia) (ka-GE) Weeks: 53
Culture: Faroese (Faroe Islands) (fo-FO) Weeks: 52
Culture: Hindi (India) (hi-IN) Weeks: 53
Culture: Maltese (Malta) (mt-MT) Weeks: 53
Culture: Sami, Northern (Norway) (se-NO) Weeks: 52
Culture: Malay (Malaysia) (ms-MY) Weeks: 53
Culture: Kazakh (Kazakhstan) (kk-KZ) Weeks: 53
Culture: Kyrgyz (Kyrgyzstan) (ky-KG) Weeks: 53
Culture: Kiswahili (Kenya) (sw-KE) Weeks: 53
Culture: Turkmen (Turkmenistan) (tk-TM) Weeks: 53
Culture: Uzbek (Latin, Uzbekistan) (uz-Latn-UZ) Weeks: 53
Culture: Tatar (Russia) (tt-RU) Weeks: 53
Culture: Bengali (India) (bn-IN) Weeks: 53
Culture: Punjabi (India) (pa-IN) Weeks: 53
Culture: Gujarati (India) (gu-IN) Weeks: 53
Culture: Oriya (India) (or-IN) Weeks: 53
Culture: Tamil (India) (ta-IN) Weeks: 53
Culture: Telugu (India) (te-IN) Weeks: 53
Culture: Kannada (India) (kn-IN) Weeks: 53
Culture: Malayalam (India) (ml-IN) Weeks: 53
Culture: Assamese (India) (as-IN) Weeks: 52
Culture: Marathi (India) (mr-IN) Weeks: 53
Culture: Sanskrit (India) (sa-IN) Weeks: 53
Culture: Mongolian (Cyrillic, Mongolia) (mn-MN) Weeks: 53
Culture: Tibetan (PRC) (bo-CN) Weeks: 53
Culture: Welsh (United Kingdom) (cy-GB) Weeks: 53
Culture: Khmer (Cambodia) (km-KH) Weeks: 52
Culture: Lao (Lao P.D.R.) (lo-LA) Weeks: 53
Culture: Galician (Galician) (gl-ES) Weeks: 53
Culture: Konkani (India) (kok-IN) Weeks: 53
Culture: Syriac (Syria) (syr-SY) Weeks: 53
Culture: Sinhala (Sri Lanka) (si-LK) Weeks: 53
Culture: Inuktitut (Syllabics, Canada) (iu-Cans-CA) Weeks: 53
Culture: Amharic (Ethiopia) (am-ET) Weeks: 53
Culture: Nepali (Nepal) (ne-NP) Weeks: 53
Culture: Frisian (Netherlands) (fy-NL) Weeks: 52
Culture: Filipino (Philippines) (fil-PH) Weeks: 53
Culture: Hausa (Latin, Nigeria) (ha-Latn-NG) Weeks: 53
Culture: Yoruba (Nigeria) (yo-NG) Weeks: 53
Culture: Quechua (Bolivia) (quz-BO) Weeks: 53
Culture: Sesotho sa Leboa (South Africa) (nso-ZA) Weeks: 53
Culture: Bashkir (Russia) (ba-RU) Weeks: 53
Culture: Luxembourgish (Luxembourg) (lb-LU) Weeks: 53
Culture: Greenlandic (Greenland) (kl-GL) Weeks: 52
Culture: Igbo (Nigeria) (ig-NG) Weeks: 53
Culture: Yi (PRC) (ii-CN) Weeks: 53
Culture: Mapudungun (Chile) (arn-CL) Weeks: 53
Culture: Mohawk (Mohawk) (moh-CA) Weeks: 53
Culture: Breton (France) (br-FR) Weeks: 53
Culture: Uyghur (PRC) (ug-CN) Weeks: 53
Culture: Maori (New Zealand) (mi-NZ) Weeks: 53
Culture: Occitan (France) (oc-FR) Weeks: 53
Culture: Corsican (France) (co-FR) Weeks: 53
Culture: Alsatian (France) (gsw-FR) Weeks: 53
Culture: Yakut (Russia) (sah-RU) Weeks: 53
Culture: K'iche (Guatemala) (qut-GT) Weeks: 53
Culture: Kinyarwanda (Rwanda) (rw-RW) Weeks: 53
Culture: Wolof (Senegal) (wo-SN) Weeks: 53
Culture: Scottish Gaelic (United Kingdom) (gd-GB) Weeks: 53
Culture: Arabic (Iraq) (ar-IQ) Weeks: 53
Culture: Chinese (Simplified, PRC) (zh-CN) Weeks: 53
Culture: German (Switzerland) (de-CH) Weeks: 52
Culture: English (United Kingdom) (en-GB) Weeks: 53
Culture: Spanish (Mexico) (es-MX) Weeks: 53
Culture: French (Belgium) (fr-BE) Weeks: 53
Culture: Italian (Switzerland) (it-CH) Weeks: 52
Culture: Dutch (Belgium) (nl-BE) Weeks: 53
Culture: Norwegian, Nynorsk (Norway) (nn-NO) Weeks: 52
Culture: Portuguese (Portugal) (pt-PT) Weeks: 53
Culture: Serbian (Latin, Serbia and Montenegro (Former)) (sr-Latn-CS) Weeks: 53
Culture: Swedish (Finland) (sv-FI) Weeks: 52
Culture: Azeri (Cyrillic, Azerbaijan) (az-Cyrl-AZ) Weeks: 53
Culture: Lower Sorbian (Germany) (dsb-DE) Weeks: 52
Culture: Sami, Northern (Sweden) (se-SE) Weeks: 52
Culture: Irish (Ireland) (ga-IE) Weeks: 53
Culture: Malay (Brunei Darussalam) (ms-BN) Weeks: 53
Culture: Uzbek (Cyrillic, Uzbekistan) (uz-Cyrl-UZ) Weeks: 53
Culture: Bengali (Bangladesh) (bn-BD) Weeks: 53
Culture: Mongolian (Traditional Mongolian, PRC) (mn-Mong-CN) Weeks: 53
Culture: Inuktitut (Latin, Canada) (iu-Latn-CA) Weeks: 53
Culture: Tamazight (Latin, Algeria) (tzm-Latn-DZ) Weeks: 53
Culture: Quechua (Ecuador) (quz-EC) Weeks: 53
Culture: Arabic (Egypt) (ar-EG) Weeks: 53
Culture: Chinese (Traditional, Hong Kong S.A.R.) (zh-HK) Weeks: 53
Culture: German (Austria) (de-AT) Weeks: 53
Culture: English (Australia) (en-AU) Weeks: 53
Culture: Spanish (Spain) (es-ES) Weeks: 53
Culture: French (Canada) (fr-CA) Weeks: 53
Culture: Serbian (Cyrillic, Serbia and Montenegro (Former)) (sr-Cyrl-CS) Weeks: 53
Culture: Sami, Northern (Finland) (se-FI) Weeks: 52
Culture: Quechua (Peru) (quz-PE) Weeks: 53
Culture: Arabic (Libya) (ar-LY) Weeks: 53
Culture: Chinese (Simplified, Singapore) (zh-SG) Weeks: 53
Culture: German (Luxembourg) (de-LU) Weeks: 52
Culture: English (Canada) (en-CA) Weeks: 53
Culture: Spanish (Guatemala) (es-GT) Weeks: 53
Culture: French (Switzerland) (fr-CH) Weeks: 52
Culture: Croatian (Latin, Bosnia and Herzegovina) (hr-BA) Weeks: 53
Culture: Sami, Lule (Norway) (smj-NO) Weeks: 52
Culture: Arabic (Algeria) (ar-DZ) Weeks: 53
Culture: Chinese (Traditional, Macao S.A.R.) (zh-MO) Weeks: 53
Culture: German (Liechtenstein) (de-LI) Weeks: 52
Culture: English (New Zealand) (en-NZ) Weeks: 53
Culture: Spanish (Costa Rica) (es-CR) Weeks: 53
Culture: French (Luxembourg) (fr-LU) Weeks: 53
Culture: Bosnian (Latin, Bosnia and Herzegovina) (bs-Latn-BA) Weeks: 53
Culture: Sami, Lule (Sweden) (smj-SE) Weeks: 52
Culture: Arabic (Morocco) (ar-MA) Weeks: 53
Culture: English (Ireland) (en-IE) Weeks: 53
Culture: Spanish (Panama) (es-PA) Weeks: 53
Culture: French (Monaco) (fr-MC) Weeks: 53
Culture: Serbian (Latin, Bosnia and Herzegovina) (sr-Latn-BA) Weeks: 53
Culture: Sami, Southern (Norway) (sma-NO) Weeks: 52
Culture: Arabic (Tunisia) (ar-TN) Weeks: 53
Culture: English (South Africa) (en-ZA) Weeks: 53
Culture: Spanish (Dominican Republic) (es-DO) Weeks: 53
Culture: Serbian (Cyrillic, Bosnia and Herzegovina) (sr-Cyrl-BA) Weeks: 53
Culture: Sami, Southern (Sweden) (sma-SE) Weeks: 52
Culture: Arabic (Oman) (ar-OM) Weeks: 53
Culture: English (Jamaica) (en-JM) Weeks: 53
Culture: Spanish (Bolivarian Republic of Venezuela) (es-VE) Weeks: 53
Culture: Bosnian (Cyrillic, Bosnia and Herzegovina) (bs-Cyrl-BA) Weeks: 53
Culture: Sami, Skolt (Finland) (sms-FI) Weeks: 52
Culture: Arabic (Yemen) (ar-YE) Weeks: 53
Culture: English (Caribbean) (en-029) Weeks: 53
Culture: Spanish (Colombia) (es-CO) Weeks: 53
Culture: Serbian (Latin, Serbia) (sr-Latn-RS) Weeks: 53
Culture: Sami, Inari (Finland) (smn-FI) Weeks: 52
Culture: Arabic (Syria) (ar-SY) Weeks: 53
Culture: English (Belize) (en-BZ) Weeks: 53
Culture: Spanish (Peru) (es-PE) Weeks: 53
Culture: Serbian (Cyrillic, Serbia) (sr-Cyrl-RS) Weeks: 53
Culture: Arabic (Jordan) (ar-JO) Weeks: 53
Culture: English (Trinidad and Tobago) (en-TT) Weeks: 53
Culture: Spanish (Argentina) (es-AR) Weeks: 53
Culture: Serbian (Latin, Montenegro) (sr-Latn-ME) Weeks: 53
Culture: Arabic (Lebanon) (ar-LB) Weeks: 53
Culture: English (Zimbabwe) (en-ZW) Weeks: 53
Culture: Spanish (Ecuador) (es-EC) Weeks: 53
Culture: Serbian (Cyrillic, Montenegro) (sr-Cyrl-ME) Weeks: 53
Culture: Arabic (Kuwait) (ar-KW) Weeks: 53
Culture: English (Republic of the Philippines) (en-PH) Weeks: 53
Culture: Spanish (Chile) (es-CL) Weeks: 53
Culture: Arabic (U.A.E.) (ar-AE) Weeks: 53
Culture: Spanish (Uruguay) (es-UY) Weeks: 53
Culture: Arabic (Bahrain) (ar-BH) Weeks: 53
Culture: Spanish (Paraguay) (es-PY) Weeks: 53
Culture: Arabic (Qatar) (ar-QA) Weeks: 53
Culture: English (India) (en-IN) Weeks: 53
Culture: Spanish (Bolivia) (es-BO) Weeks: 53
Culture: English (Malaysia) (en-MY) Weeks: 53
Culture: Spanish (El Salvador) (es-SV) Weeks: 53
Culture: English (Singapore) (en-SG) Weeks: 53
Culture: Spanish (Honduras) (es-HN) Weeks: 53
Culture: Spanish (Nicaragua) (es-NI) Weeks: 53
Culture: Spanish (Puerto Rico) (es-PR) Weeks: 53
Culture: Spanish (United States) (es-US) Weeks: 53
Culture: Bosnian (Cyrillic) (bs-Cyrl) Weeks: 53
Culture: Bosnian (Latin) (bs-Latn) Weeks: 53
Culture: Serbian (Cyrillic) (sr-Cyrl) Weeks: 53
Culture: Serbian (Latin) (sr-Latn) Weeks: 53
Culture: Sami (Inari) (smn) Weeks: 52
Culture: Azeri (Cyrillic) (az-Cyrl) Weeks: 53
Culture: Sami (Skolt) (sms) Weeks: 52
Culture: Chinese (zh) Weeks: 53
Culture: Norwegian (Nynorsk) (nn) Weeks: 52
Culture: Bosnian (bs) Weeks: 53
Culture: Azeri (Latin) (az-Latn) Weeks: 53
Culture: Sami (Southern) (sma) Weeks: 52
Culture: Uzbek (Cyrillic) (uz-Cyrl) Weeks: 53
Culture: Mongolian (Cyrillic) (mn-Cyrl) Weeks: 53
Culture: Inuktitut (Syllabics) (iu-Cans) Weeks: 53
Culture: Chinese (Traditional) (zh-Hant) Weeks: 53
Culture: Norwegian (Bokmål) (nb) Weeks: 52
Culture: Serbian (sr) Weeks: 53
Culture: Tajik (Cyrillic) (tg-Cyrl) Weeks: 53
Culture: Lower Sorbian (dsb) Weeks: 52
Culture: Sami (Lule) (smj) Weeks: 52
Culture: Uzbek (Latin) (uz-Latn) Weeks: 53
Culture: Mongolian (Traditional Mongolian) (mn-Mong) Weeks: 53
Culture: Inuktitut (Latin) (iu-Latn) Weeks: 53
Culture: Tamazight (Latin) (tzm-Latn) Weeks: 53
Culture: Hausa (Latin) (ha-Latn) Weeks: 53
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top