data_faking/data/datetime/
date_naive.rs

1use 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