Skip to content

Commit

Permalink
Work on improving date.py
Browse files Browse the repository at this point in the history
  • Loading branch information
MangelMaxime committed Dec 14, 2023
1 parent 3c1eb32 commit 660f032
Show file tree
Hide file tree
Showing 7 changed files with 131 additions and 12 deletions.
4 changes: 4 additions & 0 deletions src/Fable.Cli/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
* [GH-3655](https://github.com/fable-compiler/Fable/issues/3655) Fix for Python output file names (by @dbrattli)
* [GH-3660](https://github.com/fable-compiler/Fable/issues/3660) Fix for decimal to string with culture (by @dbrattli)

#### Dart

* Fix `DateTime.DayOfWeek` (by @MangelMaxime)

## 4.8.1 - 2023-12-12

### Fixed
Expand Down
10 changes: 10 additions & 0 deletions src/fable-library-py/fable_library/date.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,14 @@ def to_universal_time(d: datetime) -> datetime:
return d.astimezone(timezone.utc)


def day_of_week(d: datetime) -> int:
return (d.weekday() + 1) % 7


def day_of_year(d: datetime) -> int:
return d.timetuple().tm_yday


def date_to_string_with_custom_format(date: datetime, format: str, utc: bool) -> str:
def match(match: Match[str]) -> str:
group = match.group()
Expand Down Expand Up @@ -297,6 +305,8 @@ def add_milliseconds(d: datetime, v: int) -> datetime:
"minute",
"second",
"millisecond",
"day_of_week",
"day_of_year",
"date_to_string_with_custom_format",
"date_to_string_with_offset",
"date_to_string_with_kind",
Expand Down
16 changes: 16 additions & 0 deletions src/quicktest-py/quicktest.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,20 @@ let main argv =
// use file = builtins.``open``(StringPath "data.txt")
// file.read() |> printfn "File contents: %s"

DateTime(2014, 10, 5).DayOfWeek |> equal DayOfWeek.Sunday
DateTime(2014, 10, 6).DayOfWeek |> equal DayOfWeek.Monday
DateTime(2014, 10, 7).DayOfWeek |> equal DayOfWeek.Tuesday
DateTime(2014, 10, 8).DayOfWeek |> equal DayOfWeek.Wednesday
DateTime(2014, 10, 9).DayOfWeek |> equal DayOfWeek.Thursday
DateTime(2014, 10, 10).DayOfWeek |> equal DayOfWeek.Friday
DateTime(2014, 10, 11).DayOfWeek |> equal DayOfWeek.Saturday


// let t = DayOfWeek.Thursday

let d = DateTime(2014, 10, 9)
DateTime(2014, 10, 9).DayOfYear |> equal 282

DateTime(2020, 10, 9).DayOfYear |> equal 283

0
15 changes: 11 additions & 4 deletions tests/Dart/src/DateTimeTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -265,12 +265,19 @@ let tests() =
d.Day + d'.Day |> equal 18

testCase "DateTime.DayOfWeek works" <| fun () ->
let d = DateTime(2014, 10, 9)
d.DayOfWeek |> equal DayOfWeek.Thursday
DateTime(2014, 10, 5).DayOfWeek |> equal DayOfWeek.Sunday
DateTime(2014, 10, 6).DayOfWeek |> equal DayOfWeek.Monday
DateTime(2014, 10, 7).DayOfWeek |> equal DayOfWeek.Tuesday
DateTime(2014, 10, 8).DayOfWeek |> equal DayOfWeek.Wednesday
DateTime(2014, 10, 9).DayOfWeek |> equal DayOfWeek.Thursday
DateTime(2014, 10, 10).DayOfWeek |> equal DayOfWeek.Friday
DateTime(2014, 10, 11).DayOfWeek |> equal DayOfWeek.Saturday

testCase "DateTime.DayOfYear works" <| fun () ->
let d = DateTime(2014, 10, 9)
d.DayOfYear |> equal 282
// Standard year
DateTime(2014, 10, 9).DayOfYear |> equal 282
// Leap year
DateTime(2020, 10, 9).DayOfYear |> equal 283

testCase "DateTime.Millisecond works" <| fun () ->
let d = DateTime(2014, 10, 9, 13, 23, 30, 999)
Expand Down
15 changes: 11 additions & 4 deletions tests/Js/Main/DateTimeTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -312,12 +312,19 @@ let tests =
d.Day + d'.Day |> equal 18

testCase "DateTime.DayOfWeek works" <| fun () ->
let d = DateTime(2014, 10, 9)
d.DayOfWeek |> equal DayOfWeek.Thursday
DateTime(2014, 10, 5).DayOfWeek |> equal DayOfWeek.Sunday
DateTime(2014, 10, 6).DayOfWeek |> equal DayOfWeek.Monday
DateTime(2014, 10, 7).DayOfWeek |> equal DayOfWeek.Tuesday
DateTime(2014, 10, 8).DayOfWeek |> equal DayOfWeek.Wednesday
DateTime(2014, 10, 9).DayOfWeek |> equal DayOfWeek.Thursday
DateTime(2014, 10, 10).DayOfWeek |> equal DayOfWeek.Friday
DateTime(2014, 10, 11).DayOfWeek |> equal DayOfWeek.Saturday

testCase "DateTime.DayOfYear works" <| fun () ->
let d = DateTime(2014, 10, 9)
d.DayOfYear |> equal 282
// Standard year
DateTime(2014, 10, 9).DayOfYear |> equal 282
// Leap year
DateTime(2020, 10, 9).DayOfYear |> equal 283

testCase "DateTime.Millisecond works" <| fun () ->
let d = DateTime(2014, 10, 9, 13, 23, 30, 999)
Expand Down
68 changes: 68 additions & 0 deletions tests/Python/TestDateTime.fs
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,75 @@ let ``test DateTime.Parse with time-only string works`` () = // See #1045
let d = DateTime.Parse("15:5:34 PM", CultureInfo.InvariantCulture)
d.Hour + d.Minute + d.Second |> equal 54

// [<Fact>]
// let ``test DateTime.Ticks works`` () =
// let d = DateTime(2014, 10, 9, 13, 23, 30, 999, DateTimeKind.Utc)
// d.Ticks |> equal 635484578109990000L
// let d = DateTime(2014, 10, 9, 13, 23, 30, 999, DateTimeKind.Local)
// d.Ticks |> equal 635484578109990000L
// let d = DateTime(2014, 10, 9, 13, 23, 30, 999)
// d.Ticks |> equal 635484578109990000L

[<Fact>]
let ``test DateTime.Year works`` () =
let d = DateTime(2014, 10, 9, 13, 23, 30, DateTimeKind.Local)
let d' = DateTime(2014, 10, 9, 13, 23, 30, DateTimeKind.Utc)
d.Year + d'.Year
|> equal 4028

[<Fact>]
let ``test DateTime.Day works`` () =
let d = DateTime(2014, 10, 9, 13, 23, 30, DateTimeKind.Local)
let d' = DateTime(2014, 10, 9, 13, 23, 30, DateTimeKind.Utc)
d.Day + d'.Day |> equal 18

[<Fact>]
let ``test DateTime.Month works`` () =
let d = DateTime(2014, 10, 9, 13, 23, 30, DateTimeKind.Local)
let d' = DateTime(2014, 10, 9, 13, 23, 30, DateTimeKind.Utc)
d.Month + d'.Month
|> equal 20

[<Fact>]
let ``test DateTime.Hour works`` () =
let d = DateTime(2014, 10, 9, 13, 23, 30, DateTimeKind.Local)
d.Hour |> equal 13

[<Fact>]
let ``test DateTime.Minute works`` () =
let d = DateTime(2014, 10, 9, 13, 23, 30, DateTimeKind.Local)
let d' = DateTime(2014, 10, 9, 13, 23, 30, DateTimeKind.Utc)
d.Minute + d'.Minute
|> equal 46

[<Fact>]
let ``test DateTime.Second works`` () =
let d = DateTime(2014,9,12,0,0,30)
let d' = DateTime(2014,9,12,0,0,59)
d.Second + d'.Second
|> equal 89

[<Fact>]
let ``test DateTime.Millisecond works`` () =
let d = DateTime(2014, 10, 9, 13, 23, 30, 999)
d.Millisecond |> equal 999

[<Fact>]
let ``DateTime.DayOfWeek works`` () =
DateTime(2014, 10, 5).DayOfWeek |> equal DayOfWeek.Sunday
DateTime(2014, 10, 6).DayOfWeek |> equal DayOfWeek.Monday
DateTime(2014, 10, 7).DayOfWeek |> equal DayOfWeek.Tuesday
DateTime(2014, 10, 8).DayOfWeek |> equal DayOfWeek.Wednesday
DateTime(2014, 10, 9).DayOfWeek |> equal DayOfWeek.Thursday
DateTime(2014, 10, 10).DayOfWeek |> equal DayOfWeek.Friday
DateTime(2014, 10, 11).DayOfWeek |> equal DayOfWeek.Saturday

[<Fact>]
let ``test DateTime.DayOfYear works`` () =
// Standard year
DateTime(2014, 10, 9).DayOfYear |> equal 282
// Leap year
DateTime(2020, 10, 9).DayOfYear |> equal 283

// [<Fact>]
// let ``test DateTime.ToLocalTime works`` () =
Expand Down
15 changes: 11 additions & 4 deletions tests/Rust/tests/src/DateTimeTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -348,13 +348,20 @@ let ``DateTime.Day works`` () =

[<Fact>]
let ``DateTime.DayOfWeek works`` () =
let d = DateTime(2014, 10, 9)
d.DayOfWeek |> equal DayOfWeek.Thursday
DateTime(2014, 10, 5).DayOfWeek |> equal DayOfWeek.Sunday
DateTime(2014, 10, 6).DayOfWeek |> equal DayOfWeek.Monday
DateTime(2014, 10, 7).DayOfWeek |> equal DayOfWeek.Tuesday
DateTime(2014, 10, 8).DayOfWeek |> equal DayOfWeek.Wednesday
DateTime(2014, 10, 9).DayOfWeek |> equal DayOfWeek.Thursday
DateTime(2014, 10, 10).DayOfWeek |> equal DayOfWeek.Friday
DateTime(2014, 10, 11).DayOfWeek |> equal DayOfWeek.Saturday

[<Fact>]
let ``DateTime.DayOfYear works`` () =
let d = DateTime(2014, 10, 9)
d.DayOfYear |> equal 282
// Standard year
DateTime(2014, 10, 9).DayOfYear |> equal 282
// Leap year
DateTime(2020, 10, 9).DayOfYear |> equal 283

[<Fact>]
let ``DateTime.Millisecond works`` () =
Expand Down

0 comments on commit 660f032

Please sign in to comment.