Topic
Summary
- How to transform a time interval like
hh:mm:ss
into a time duration and sum a duration in multiple pages?
Test
Summary
- dataview: v0.5.46
Input
Summary
dictionary files:
- Location: “100_Project/01_dataviewjs/01_by_example/Q24_SumDuration/Q24_test_data”
folder: 03
- filename :
dic_19790302
---
Date: 1979-03-02
TimeInterval: 01:30:00
---
#Project/P03
orgWatchingDuration :: 90 minutes
- filename :
dic_19790305
---
Date: 1979-03-05
TimeInterval: 02:00:00
---
#Project/P03
orgWatchingDuration :: 120 minutes
- filename :
dic_19790316
---
Date: 1979-03-16
TimeInterval: 06:00:00
---
#Project/P03
orgWatchingDuration :: 360 minutes
folder: 08_null
- filename :
dic_19790801
---
Date: 1979-08-01
TimeInterval:
---
#Project/P08
orgWatchingDuration ::
folder: 09_undefined
- filename :
dic_19790901
---
Date: 1979-09-01
---
#Project/P09
DQL10_transform_timeInterval_into_Duration_and_sum_and_TABLE
Summary
Main DQL
Code Name | Data type | Group By | Purposes | Remark |
---|---|---|---|---|
DQL10 _transform_timeInterval _into_Duration _and_sum _and_TABLE |
TimeInterval :a Time Interval like hh:mm:ss
|
yes | 1.To filter by TimeInterval 2.To define a field variable hh 3.To define a field variable mm 4.To define a field variable ss 5.To define a field variable watchingDuration 6.To filter by watchingDuration 7.To sort by file.link in ascending order 8.To group by true 9.To display the result as a table |
The DQL10 is based on the DQL10 in the following topic. - Solutions: by Justdoitcc |
Notes
Summary
Q1: How to transform a time interval like hh:mm:ss
into a time duration?
Summary_Q1
A time interval
```md
TimeInterval :: 01:30:00
```
A time duration
```md
watchingDuration :: 1 hours, 30 minutes
```
A1: Original Example10 (DQL)
```dataview
FLATTEN number(split(TimeInterval, ":")[0]) AS hh
FLATTEN number(split(TimeInterval, ":")[1]) AS mm
FLATTEN number(split(TimeInterval, ":")[2]) AS ss
FLATTEN dur(hh+ " hours" + mm + " minutes" + ss + " seconds") AS watchingDuration
WHERE watchingDuration
```
A2: Another Example11 (DVJS)
title: Another Example11
collapse: close
icon:
color:
```dataviewjs
// M11.define timeInterval:
// #####################################################################
let timeInterval = "01:30:00";
// M13.define watchingDuration:
// #####################################################################
// Create a Duration from an ISO 8601 time string
let watchingDuration = Duration.fromISOTime(timeInterval);
// M21.Output watchingDuration:
// #####################################################################
dv.span(watchingDuration); //=>1 hours, 30 minutes
dv.span("<br>");
// M31.Output watchingDuration:
// #####################################################################
// Convert this Duration into its representation in minutes
dv.span(watchingDuration.shiftTo("minutes").minutes); //=>90
```
Screenshots(A2):
```md
1 hours, 30 minutes
90
```
Code DQL10_transform_timeInterval_into_Duration_and_sum_and_TABLE
Summary_code
title: DQL10_transform_timeInterval_into_Duration_and_sum_and_TABLE =>1.To filter by `TimeInterval` 2.To define a field variable `hh` 3.To define a field variable `mm` 4.To define a field variable `ss` 5.To define a field variable `watchingDuration` 6.To filter by `watchingDuration` 7.To sort by file.link in ascending order 8.To group by true 9.To display the result as a table
collapse: close
icon:
color:
```dataview
TABLE WITHOUT ID
rows.file.link AS "File",
rows.TimeInterval AS "TimeInterval",
rows.watchingDuration AS "watchingDuration",
sum(map(rows.watchingDuration, (e) => sum(default(e, 0)))) AS "sumDuration"
FROM "100_Project/01_dataviewjs/01_by_example/Q24_SumDuration/Q24_test_data"
WHERE TimeInterval
FLATTEN number(split(TimeInterval, ":")[0]) AS hh
FLATTEN number(split(TimeInterval, ":")[1]) AS mm
FLATTEN number(split(TimeInterval, ":")[2]) AS ss
FLATTEN dur(hh+ " hours" + mm + " minutes" + ss + " seconds") AS watchingDuration
WHERE watchingDuration
SORT file.link ASC
GROUP BY true
```
Screenshots(DQL10):
DVJS10_transform_timeInterval_into_Duration_and_sum_and_TABLE
Summary
Main DVJS
Code Name | Data type | Group By | Purposes | Remark |
---|---|---|---|---|
DVJS10 _transform_timeInterval _into_Duration _and_sum _and_TABLE |
TimeInterval :a Time Interval like hh:mm:ss
|
no | 1.To transform a time interval like hh:mm:ss into a time duration 2.To sum a duration 3.To display the result as a table |
1.The DVJS10 is based on the DVJS20 in the following topic. - Solutions: by Justdoitcc 2.Each of the step M31, M33 and M51 in the DVJS10 is based on the DVJS10 in the following topic. - Solutions: by Justdoitcc |
code DVJS10_transform_timeInterval_into_Duration_and_sum_and_TABLE
Summary_code
title: DVJS10_transform_timeInterval_into_Duration_and_sum_and_TABLE =>1.To transform a time interval like `hh:mm:ss` into a time duration 2.To sum a duration 3.To display the result as a table
collapse: close
icon:
color:
```dataviewjs
// M11. define pages: gather relevant pages
// #####################################################################
let pages = dv
.pages(
'"100_Project/01_dataviewjs/01_by_example/Q24_SumDuration/Q24_test_data"'
)
.where((page) => page.TimeInterval)
.sort((page) => page.file.name, "asc");
// M13.define watchingDuration:
// #####################################################################
// Create a Duration from an ISO 8601 time string
// let watchingDuration = Duration.fromISOTime(pages.TimeInterval);
let watchingDuration = pages.TimeInterval.map((e) => Duration.fromISOTime(e));
// M19.define sumDuration: To sum watchingDuration (milliseconds)
// the data type of sumDuration: duration
// #####################################################################
let sumDuration = dv.func.default(dv.func.sum(watchingDuration), 0);//=>9 hours, 30 minutes
// M21.define dur_sumDuration:
// the data type of dur_sumDuration: duration
// #####################################################################
// let dur_sumDuration = luxon.Duration.fromMillis(sumDuration);//=>9 hours, 30 minutes
// M29.Output sumDuration: Debug ONLY
// #####################################################################
// dv.span("total watching time: ");
// // dv.span(dur_sumDuration);
// dv.span(sumDuration);
// ### M31.define : aoa_drinks
// #####################################################################
// dv.table(
// ["Name", "Price", "Caffeine Content"],
// [
// ["Black Coffee", 120, 300],
// ["Green Tea", 100, 200],
// ["Apple Juice", 110, 0],
// ["Iced Chocolate", 130, 0],
// ["Hot Chocolate", 105, 6],
// ]
// );
// ["File", "TimeInterval", "watchingDuration"]
let aoa_drinks = pages.map((page) => [
page.file.link,
page.TimeInterval,
Duration.fromISOTime(page.TimeInterval),
]);
// ### M33.update aoa_drinks: push the_last_row_Total
// #####################################################################
// ["File", "Spend ($)", "Company", "Payment Method", "Total Spend ($)"]
// aoa_drinks.push([
// "**Total**",
// i_Total_Spend,
// "",
// "",
// i_Total_Spend,
// ]);
// ["File", "TimeInterval", "watchingDuration"]
aoa_drinks["values"][aoa_drinks.length] = [
"**Total**",
"",
sumDuration,
];
// ### M51. TABLE : aoa_drinks
// #####################################################################
// dv.table(
// ["Name", "Price", "Caffeine Content"],
// [
// ["Black Coffee", 120, 300],
// ["Green Tea", 100, 200],
// ["Apple Juice", 110, 0],
// ["Iced Chocolate", 130, 0],
// ["Hot Chocolate", 105, 6],
// ]
// );
// ["File", "TimeInterval", "watchingDuration"]
//dv.header(2, "M51.Spend Report in 2003");
dv.table(
["File", "TimeInterval", "watchingDuration"],
aoa_drinks
);