Przykłady:Uzyskaj numer tygodnia od podanej daty
'DD/MM/YYYY
"1/1/2009" should give `1`
"31/1/2009" should give `5`
"1/2/2009" should also give `5`
Format("1/2/2009", "ww")
zostaje przywrócone 6
.
Jak mogę uzyskać poprawny wynik?
Przykłady:Uzyskaj numer tygodnia od podanej daty
'DD/MM/YYYY
"1/1/2009" should give `1`
"31/1/2009" should give `5`
"1/2/2009" should also give `5`
Format("1/2/2009", "ww")
zostaje przywrócone 6
.
Jak mogę uzyskać poprawny wynik?
robi dwie rzeczy, które nie pasują do Twoich oczekiwań, myślę: Zakładając chcesz tydzień z 1 stycznia, jak w tygodniu 1, jak i korzystania z niedzieli Pierwszy dzień tygodnia Tak więc ma tydzień 1 od niedzieli 28 grudnia 2008 do soboty 3 dni d Jan 2009.
Tydzień 6 rozpocznie się w niedzielę 1 lutego tą metodą.
Norma ISO dotyczy pierwszego tygodnia, obejmującego 4 dni stycznia lub pierwszy czwartek roku (różne sposoby wyrażania tego samego). Możesz określić metodę obliczania i pierwszy dzień tygodnia:
Format(SomeDate,"ww",vbMonday,vbFirstFourDays)
zobaczyć tutaj składni:
https://support.office.com/en-US/article/Format-Function-6F29D87B-8761-408D-81D3-63B9CD842530
+1, to jest kompletna odpowiedź. Mam nadzieję, że nie masz nic przeciwko edycji kosmetycznej. –
Wcale nie, a teraz otrzymałem informację o moim profilu, więc mam odpowiednią nazwę (właśnie wyskoczyłem z superuser.com i zapisałem się, aby odpowiedzieć na to pytanie) – AdamV
http://www.rondebruin.nl /isodate.htm to kolejne dobre odniesienie dla ISO –
Może to działa: Format (YourDate, "WW", vbMonday)
o, widzę. Dzięki Sosh. It * działa * teraz :-P –
@Sosh: Jestem ciekawy, co OP oczekuje na 01/05/09 (5 stycznia 09)? Sądzę, że OP może oczekiwać, że 5 stycznia będzie tydzień 1, podczas gdy będzie to tydzień 2, jak na waszym przykładzie. – shahkalpesh
Istnieje również argument firstweekofyear dla funkcji formatu: vbUseSystem, vbFirstJan1, vbFirstFourDays, vbFirstFullWeek – Fionnuala
"poprawny wynik" zależy od lokalizacji. Może VBA pozwoli ci wybrać system kalendarza, w przeciwnym razie nie masz szczęścia.
Pamiętaj, że First-On-xxDay nie jest Twoim jedynym problemem. Istnieje również wariacja na temat całego tygodnia tygodnia. Tydzień 1 w jednym systemie może być Tydzień 53 z poprzedniego roku w innym systemie.
Przetestuj więc dokładnie i nie daj się uwieść, aby "poprawić o 1".
dzięki. O twojej notatce: numer tygodnia, dla mnie, nie jest krytyczny. Tylko * towarzyszy * polu daty. –
Istnieje cały standard numery tygodni: ISO-8601
Tak, ale nie wszyscy klienci (kraje) używają tego. –
Jeżeli niedziela jest pierwszym dniem tygodnia (jak to jest w niektórych lokalizacjach), a następnie 6 jest poprawna weeknumber dla " 02.01.2009" (1 lutego 2009)
Niezależnie od dnia tygodnia Twój tydzień rozpoczyna się, ty trzeba przekazać jednoznaczne wartości dat. "31/1/2009" może być tylko jedną datą (31 stycznia), ale "1/2/2009" może być 2 stycznia (amerykański styl) lub 1 lutego (wszyscy, którzy mają więcej sensu niż my USAns).
W tym przypadku użyłbym DateSerial(), aby upewnić się, że data nie jest błędnie interpretowane:
Format(DateSerial(2009,2,1), "ww", vbMonday)
Chociaż nie jest przyczyną problemu, ponieważ dostęp usłużnie wykorzystuje zlokalizowane ustawienia daty danego systemu, ja myślę, że to jest coś, co i tak powinieneś zrobić. Z pewnością jesteś zmuszony to zrobić w SQL w Accessie, więc nie sądzę, że jest to zły nawyk w kodzie i wyrażeniach.
Dzięki David. Zapamiętam to. –
Miałem ten sam problem.
Okazało tydzień 53 i tydzień 1, jeszcze dni w tygodniu 53 i 1 tygodniu są w tygodniu 1
raz pierwszy spróbował zmienić format daty w zapytaniu Dostęp do tego:
OrderWeek: Format ([OrderDate], "yyyy-ww", 1,3) < - Ale to nie wystarczyło. Otrzymujesz daty takie jak 2014-52 w tygodniu 52 i 2015-52, gdzie był to tydzień 1 wcześniej.
Również sortowanie nie było takie, jak mi się podobało. Posortowano dane na lata 2014-1, 2014-11, 2014-2 itd. Chcę, aby były wyświetlane jako 2014-01, 2014-02 .. 2014-11 itd.
Oto nowy kod do wyświetlenia zarówno rok i tydzień poprawnie w Query dostępie:
ActualWeek: IIf(DatePart("ww",[SomeDate])=53,DatePart("yyyy",[SomeDate])+1,DatePart("yyyy",[SomeDate])) & "-" & IIf(DatePart("ww",[SomeDate])=53,"01",IIf(DatePart("ww",[SomeDate])<10,"0" & DatePart("ww",[SomeDate]),DatePart("ww",[SomeDate])))
To teraz pokazuje żadnych dni od tygodnia 53 jako część tygodnia 1
To zliczenie niedzielę jako pierwszy dzień tygodnia, a nie poniedziałek . – falstro