data_faking/data/datetime/
date_naive.rs1use wasm_bindgen::prelude::*;
2use chrono::{NaiveDate, TimeDelta, Utc};
3use crate::utils::seeder;
4
5use super::internals::{gen_days, gen_month, gen_year_epoch, gen_year_unsafe, YEAR_EPOCH_MAX, YEAR_EPOCH_MIN};
6
7const DATE_FORMAT: &str = "%Y-%m-%d";
8
9#[wasm_bindgen]
10pub fn date_naive() -> String {
11 let ndo = gen_date_naive();
12 if ndo.is_none() {
13 return "".to_string();
14 }
15 return ndo.unwrap().format(DATE_FORMAT).to_string();
16}
17
18#[wasm_bindgen]
19pub fn date_naive_unsafe() -> String {
20 let year = gen_year_unsafe();
21 let month = gen_month();
22 let day = gen_days(year, month);
23 let ndo = NaiveDate::from_ymd_opt(year, month, day);
24 if ndo.is_none() {
25 return "".to_string();
26 }
27 return ndo.unwrap().format(DATE_FORMAT).to_string();
28}
29
30#[wasm_bindgen]
31pub fn date_naive_between(after: String, before: String) -> String {
32 let pda = NaiveDate::parse_from_str(after.as_str(), DATE_FORMAT);
33 if pda.is_err() {
34 print!("{}\n", pda.err().unwrap());
35 return "".to_string();
36 }
37
38 let pdb = NaiveDate::parse_from_str(before.as_str(), DATE_FORMAT);
39 if pdb.is_err() {
40 print!("{}\n", pdb.err().unwrap());
41 return "".to_string();
42 }
43
44 let ndo = gen_date_naive_between(pda.unwrap(), pdb.unwrap());
45 if ndo.is_none() {
46 return "".to_string();
47 }
48 return ndo.unwrap().format(DATE_FORMAT).to_string();
49}
50
51#[wasm_bindgen]
52pub fn date_naive_before(date: String) -> String {
53 match NaiveDate::parse_from_str(date.as_str(), DATE_FORMAT) {
54 Ok(nd) => {
55 let ndo = gen_date_naive_before(nd);
56 if ndo.is_none() {
57 return "".to_string();
58 }
59 return ndo.unwrap().format(DATE_FORMAT).to_string();
60 },
61 Err(e) => {
62 print!("{}\n", e);
63 return "".to_string();
64 }
65 }
66}
67
68#[wasm_bindgen]
69pub fn date_naive_before_today() -> String {
70 let ndo = gen_date_naive_before_today();
71 if ndo.is_none() {
72 return "".to_string();
73 }
74 return ndo.unwrap().format(DATE_FORMAT).to_string();
75}
76
77#[wasm_bindgen]
78pub fn date_naive_after(date: String) -> String {
79 match NaiveDate::parse_from_str(date.as_str(), DATE_FORMAT) {
80 Ok(nd) => {
81 let ndo = gen_date_naive_after(nd);
82 if ndo.is_none() {
83 return "".to_string();
84 }
85 return ndo.unwrap().format(DATE_FORMAT).to_string();
86 },
87 Err(e) => {
88 print!("{}\n", e);
89 return "".to_string();
90 }
91}
92}
93
94#[wasm_bindgen]
95pub fn date_naive_after_today() -> String {
96 let ndo = gen_date_naive_after_today();
97 if ndo.is_none() {
98 return "".to_string();
99 }
100 return ndo.unwrap().format(DATE_FORMAT).to_string();
101}
102
103pub fn gen_date_naive() -> Option<NaiveDate> {
104 let year = gen_year_epoch();
105 let month = gen_month();
106 let day = gen_days(year, month);
107 NaiveDate::from_ymd_opt(year, month, day)
108}
109
110pub fn gen_date_naive_between(min: NaiveDate, max: NaiveDate) -> Option<NaiveDate> {
111 let delta = max.signed_duration_since(min);
112 let seconds = seeder::gen_range(1..=delta.num_seconds());
113 let nd = min + TimeDelta::seconds(seconds);
114 Some(nd)
115}
116
117pub fn gen_date_naive_before(before: NaiveDate) -> Option<NaiveDate> {
118 let min = NaiveDate::from_ymd(YEAR_EPOCH_MIN, 1, 1);
119 gen_date_naive_between(min, before)
120}
121
122pub fn gen_date_naive_before_today() -> Option<NaiveDate> {
123 let now = Utc::now();
124 let now_nd = now.naive_utc();
125 let min = NaiveDate::from_ymd(YEAR_EPOCH_MIN, 1, 1);
126 gen_date_naive_between(min, now_nd.date())
127}
128
129pub fn gen_date_naive_after(after: NaiveDate) -> Option<NaiveDate> {
130 let max = NaiveDate::from_ymd(YEAR_EPOCH_MAX, 12, 31);
131 gen_date_naive_between(after, max)
132}
133
134pub fn gen_date_naive_after_today() -> Option<NaiveDate> {
135 let now = Utc::now();
136 let now_nd = now.naive_utc();
137 let max = NaiveDate::from_ymd(YEAR_EPOCH_MAX, 12, 31);
138 gen_date_naive_between(now_nd.date(), max)
139}
140