Datviewjs date manipulation

Topic

Summary
  • How to filter the data by 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/Q20_SumDuration/Q20_test_data”
  • Suppose that today is “1987-03-08”
  • Suppose that the notes from the past seven days are to be taken into consideration.
  • Therefore, ONLY dic_19870302 ,dic_19870305 and dic_19870308 are to be taken into consideration.

03

  • filename : dic_19870302
---
Date: 1987-03-02
---
#Project/P03

WorkoutDuration:: 90 minutes



  • filename : dic_19870305
---
Date: 1987-03-05
---
#Project/P03

WorkoutDuration:: 120 minutes



04_list

  • filename : dic_19870308
---
Date: 1987-03-08
---
#Project/P03

WorkoutDuration:: 3 minutes, 7 minutes



07_excluded

  • filename : dic_19870316
---
Date: 1987-03-16
---
#Project/P03

WorkoutDuration:: 360 minutes



08_null

  • filename : dic_19870801
---
Date: 1987-08-01
---
#Project/P08

WorkoutDuration:: 



09_undefined

  • filename : dic_19870901
---
Date: 1987-09-01
---
#Project/P09



DQL10_filter_by_duration_and_sum_duration_and_LIST

Summary

Main DQL

Code Name Data type Group By Purposes Remark
DQL10
_filter_by_duration
_and
_sum_duration
_and_LIST
WorkoutDuration:
a duration
or a list of durations
yes 0.“today” = “1987-03-08”
1.To filter by WorkoutDuration
2.To filter by file.day
3.To define a field variable F_dur_diff and let F_dur_diff = date("1987-03-08") - file.day;
4.To filter by F_dur_diff
5.To sort by file.link in descending order
6.To group by true
7.To display the result as a non-list
1.Suppose that today is “1987-03-08”

2.Suppose that the notes from the past seven days are to be taken into consideration.

3.The sum expression in the DQL10 is based on the Conclusion in the following topic.
- Solutions: by Justdoitcc

Notes

Summary

to modify: “today” = “1987-03-08”

Original Example10: use date(“1987-03-08” )
```SQL
FLATTEN date("1987-03-08") - file.day AS F_dur_diff
```
Another Example11: use date(“today”)
```SQL
FLATTEN date("today") - file.day AS F_dur_diff
```

The same codes:

  • To filter the data by duration
Original Example10
```SQL
FLATTEN date("today") - file.day AS F_dur_diff
WHERE F_dur_diff <= dur("7 days") AND F_dur_diff >= dur("0 days")
```
Another Example11
```SQL
FLATTEN (date("today") - file.day).days AS F_dur_days
WHERE F_dur_days <= 7 AND F_dur_days >= 0
```
Another Example10B
```SQL

WHERE date("today") - file.day <= dur("7 days") AND date("today") - file.day >= dur("0 days")
```
Another Example11B
```SQL

WHERE (date("today") - file.day).days <= 7 AND (date("today") - file.day).days >= 0
```
Another Example10C
```SQL

WHERE date("today") - file.day <= dur("7 days") 
WHERE date("today") - file.day >= dur("0 days")
```
Another Example11C
```SQL

WHERE (date("today") - file.day).days <= 7 
WHERE (date("today") - file.day).days >= 0
```

Code DQL10_filter_by_duration_and_sum_duration_and_LIST

Summary_code
title: DQL10_filter_by_duration_and_sum_duration_and_LIST =>0."today" = "1987-03-08" 1.To filter by `WorkoutDuration` 2.To filter by `file.day` 3.To define a field variable `F_dur_diff` and `let F_dur_diff = date("1987-03-08") - file.day;` 4.To filter by `F_dur_diff` 5.To sort by file.link in descending order 6.To group by true 7.To display the result as a non-list
collapse: close
icon: 
color: 
```dataview
LIST WITHOUT ID
      "total workout time:  " + sum(map(rows.WorkoutDuration, (e) => sum(default(e, 0))))

FROM "100_Project/01_dataviewjs/01_by_example/Q20_SumDuration/Q20_test_data"
WHERE file.day != null
WHERE WorkoutDuration != null

FLATTEN date("1987-03-08") - file.day AS F_dur_diff
WHERE F_dur_diff <= dur("7 days") AND F_dur_diff >= dur("0 days")

SORT file.link DESC
GROUP BY true

```

Screenshots(DQL10): “today” = “1987-03-08”


DVJS10_debug_the_first_original_code_of_kjz

Summary

Main DVJS

Code Name Data type Group By Purposes Remark
DVJS10
_debug
_the_first
_original_code
_of_kjz
WorkoutDuration:
a duration
or a list of durations
no To debug the first original code of kjz Suppose that today is “1987-03-08”

Notes

Summary

to modify(M11): “today” = “1987-03-08”

Original Example10: use dv.date(“1987-03-08” )
```JS
// M11. define pagesPre: gather relevant pages
// #####################################################################
//const pagesPre = dv.pages('"Workouts/2022"')
let pagesPre = dv
    .pages(
        '"100_Project/01_dataviewjs/01_by_example/Q20_SumDuration/Q20_test_data"'
    )
    //Added by Justdoitcc 2022-10-16 10:30
    .where((page) => page.file.day) 
    .where((page) => page.WorkoutDuration)
    .where((page) => dv.date("1987-03-08") - page.file.day <= dv.duration("7 days"))
    .where((page) => dv.date("1987-03-08") - page.file.day >= dv.duration("0 days"))    
    
    .sort((k) => k.file.name, "desc");
```
Another Example11: use dv.date(“today”)
```JS
// M11. define pagesPre: gather relevant pages
// #####################################################################
//const pagesPre = dv.pages('"Workouts/2022"')
let pagesPre = dv
    .pages(
        '"100_Project/01_dataviewjs/01_by_example/Q20_SumDuration/Q20_test_data"'
    )
    //Added by Justdoitcc 2022-10-16 10:30
    .where((page) => page.file.day) 
    .where((page) => page.WorkoutDuration)
    .where((page) => dv.date("today") - page.file.day <= dv.duration("7 days"))
    .where((page) => dv.date("today") - page.file.day >= dv.duration("0 days"))    
    
    .sort((k) => k.file.name, "desc");
```

code DVJS10_debug_the_first_original_code_of_kjz

Summary_code
title: DVJS10_debug_the_first_original_code_of_kjz =>0."today" = "1987-03-08" 
collapse: close
icon: 
color: 
```dataviewjs
// M11. define pagesPre: gather relevant pages
// #####################################################################
//const pagesPre = dv.pages('"Workouts/2022"')
let pagesPre = dv
    .pages(
        '"100_Project/01_dataviewjs/01_by_example/Q20_SumDuration/Q20_test_data"'
    )
    //Added by Justdoitcc 2022-10-16 10:30
    .where((page) => page.file.day) 
    .where((page) => page.WorkoutDuration)
    .where((page) => dv.date("1987-03-08") - page.file.day <= dv.duration("7 days"))
    .where((page) => dv.date("1987-03-08") - page.file.day >= dv.duration("0 days"))
    
    .sort((k) => k.file.name, "desc");


// M11.DEB10 debug pagesPre: 
// #####################################################################
dv.span("##### M11.DEB10 debug pagesPre:");
dv.span(pagesPre.file.name);
dv.span(pagesPre.file.day);
dv.span(pagesPre.WorkoutDuration);


// M21.define pages:
// #####################################################################
//Remarked by Justdoitcc 2022-10-16 10:35
//Added by Justdoitcc 2022-10-15 13:30
//let pages = [];


// M23.update pages: 
// #####################################################################
//Remarked by Justdoitcc 2022-10-16 10:35
// let n = 0;
// for (let i = 0; i < pagesPre.length; i++) {
//     // M21.IF10 filter pagesPre:
//     // #####################################################################
//     //Remarked by Justdoitcc 2022-10-15 13:22
//     //if(dv.date(today) - pagesPre[i].file.day <= dur(7 days)) {
//     if (
//         dv.date("today") - pagesPre[i].file.day <= dv.duration("7 days") &&
//         // Added by Justdoitcc 2022-10-15 13:10
//         dv.date("today") - pagesPre[i].file.day >= dv.duration("0 days")
//     ) {
//         //Remarked by Justdoitcc 2022-10-15 13:30
//         //let pages[n] = pagesPre[i];
//         pages[n] = pagesPre[i];
//         n += 1;
//     }
// }


// M31.define sumDuration: To sum WorkoutDuration (milliseconds)
// #####################################################################
//Added by Justdoitcc 2022-10-16 10:40
let pages = pagesPre;

let sumDuration = 0;
for (let i = 0; i < pages.length; i++) {
    //Remarked by Justdoitcc 2022-10-16 10:40
    // if (pages[i].WorkoutDuration) {
    //     sumDuration += pages[i].WorkoutDuration;
    // }
    sumDuration += pages[i].WorkoutDuration;
}


//dv.span(sumDuration);
//dv.span(dv.func.typeof(sumDuration));


// M33.define sumHours and minutes:
// #####################################################################
//let sumHours = sumDuration / 60;

//Remarked by Justdoitcc 2022-10-15 13:40
//let sumHours = Math.floor(sumDuration/60);
//let minutes = sumDuration % 60;

let sumHours = Math.floor(sumDuration / 60 / 60 / 1000);
let minutes = (sumDuration / 60 / 1000) % 60;


// M41.Output sumDuration:
// #####################################################################
dv.span("##### M41.Output sumDuration:");
dv.paragraph(
    "total workout time:  " + sumHours + " hours " + minutes + " minutes "
);



Screenshots(DVJS10): “today” = “1987-03-08”


DVJS20_filter_by_duration_and_sum_duration_and_SPAN

Summary

Main DVJS

Code Name Data type Group By Purposes Remark
DVJS20
_filter_by_duration
_and_sum_duration
_and_SPAN
WorkoutDuration:
a duration
or a list of durations
no To filter the data by duration and sum a duration in multiple pages 1.Suppose that today is “1987-03-08”
2.Suppose that the notes from the past seven days are to be taken into consideration.
3.The sum expression in the DVJS20 is based on the Conclusion in the following topic.
- Solutions: by Justdoitcc

Notes

Summary

to modify(M11): “today” = “1987-03-08”

Original Example10: use dv.date(“1987-03-08” )
```JS
// M11. define pages: gather relevant pages
// #####################################################################
let pages = dv
    .pages(
        '"100_Project/01_dataviewjs/01_by_example/Q20_SumDuration/Q20_test_data"'
    )
    .where((page) => page.file.day) 
    .where((page) => page.WorkoutDuration)
    .where((page) => dv.date("1987-03-08") - page.file.day <= dv.duration("7 days"))
    .where((page) => dv.date("1987-03-08") - page.file.day >= dv.duration("0 days")) 
    .sort((page) => page.file.name, "desc");
```
Another Example11: use dv.date(“today”)
```JS
// M11. define pages: gather relevant pages
// #####################################################################
let pages = dv
    .pages(
        '"100_Project/01_dataviewjs/01_by_example/Q20_SumDuration/Q20_test_data"'
    )
    .where((page) => page.file.day) 
    .where((page) => page.WorkoutDuration)
    .where((page) => dv.date("today") - page.file.day <= dv.duration("7 days"))
    .where((page) => dv.date("today") - page.file.day >= dv.duration("0 days"))    
    .sort((page) => page.file.name, "desc");
```

code DVJS20_filter_by_duration_and_sum_duration_and_SPAN

Summary_code
title: DVJS20_filter_by_duration_and_sum_duration_and_SPAN =>0."today" = "1987-03-08" 1.To filter the data by duration and sum a duration in multiple pages
collapse: close
icon: 
color: 
```dataviewjs
// M11. define pages: gather relevant pages
// #####################################################################
let pages = dv
    .pages(
        '"100_Project/01_dataviewjs/01_by_example/Q20_SumDuration/Q20_test_data"'
    )
    .where((page) => page.file.day) 
    .where((page) => page.WorkoutDuration)
    .where((page) => dv.date("1987-03-08") - page.file.day <= dv.duration("7 days"))
    .where((page) => dv.date("1987-03-08") - page.file.day >= dv.duration("0 days")) 
    .sort((page) => page.file.name, "desc");


// M21.define sumDuration: To sum WorkoutDuration (milliseconds)
// the data type of sumDuration: number
// #####################################################################
let sumDuration = dv.func.default(dv.func.sum(pages.WorkoutDuration), 0);


// M31.define dur_sumDuration:
// the data type of dur_sumDuration: duration
// #####################################################################
let dur_sumDuration = luxon.Duration.fromMillis(sumDuration);


// M41.Output dur_sumDuration:
// #####################################################################
dv.span("total workout time:  ");
dv.span(dur_sumDuration);




Screenshots(DVJS20): “today” = “1987-03-08”