1package faker
2
3import (
4 "fmt"
5 "reflect"
6 "time"
7
8 "github.com/go-faker/faker/v4/pkg/options"
9)
10
11var century = []string{"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX", "XXI"}
12var timezones = []string{
13 "Australia/Adelaide",
14 "Australia/Broken_Hill",
15 "Australia/South",
16 "Australia/Yancowinna",
17 "Australia/Darwin",
18 "Australia/North",
19 "America/Eirunepe",
20 "America/Porto_Acre",
21 "America/Rio_Branco",
22 "Brazil/Acre",
23 "Australia/Eucla",
24 "Australia/ACT",
25 "Australia/Canberra",
26 "Australia/Currie",
27 "Australia/Hobart",
28 "Australia/Melbourne",
29 "Australia/NSW",
30 "Australia/Sydney",
31 "Australia/Tasmania",
32 "Australia/Victoria",
33 "Australia/Brisbane",
34 "Australia/Lindeman",
35 "Australia/Queensland",
36 "Asia/Kabul",
37 "America/Anchorage",
38 "America/Juneau",
39 "America/Nome",
40 "America/Sitka",
41 "America/Yakutat",
42 "US/Alaska",
43 "Asia/Almaty",
44 "America/Boa_Vista",
45 "America/Campo_Grande",
46 "America/Cuiaba",
47 "America/Manaus",
48 "America/Porto_Velho",
49 "Asia/Yerevan",
50 "Brazil/West",
51 "Asia/Anadyr",
52 "Asia/Aqtau",
53 "Asia/Aqtobe",
54 "America/Argentina/Buenos_Aires",
55 "America/Argentina/Catamarca",
56 "America/Argentina/ComodRivadavia",
57 "America/Argentina/Cordoba",
58 "America/Argentina/Jujuy",
59 "America/Argentina/La_Rioja",
60 "America/Argentina/Mendoza",
61 "America/Argentina/Rio_Gallegos",
62 "America/Argentina/Salta",
63 "America/Argentina/San_Juan",
64 "America/Argentina/San_Luis",
65 "America/Argentina/Tucuman",
66 "America/Argentina/Ushuaia",
67 "America/Buenos_Aires",
68 "America/Catamarca",
69 "America/Cordoba",
70 "America/Jujuy",
71 "America/Mendoza",
72 "America/Rosario",
73 "America/Anguilla",
74 "America/Antigua",
75 "America/Aruba",
76 "America/Barbados",
77 "America/Blanc-Sablon",
78 "America/Curacao",
79 "America/Dominica",
80 "America/Glace_Bay",
81 "America/Goose_Bay",
82 "America/Grand_Turk",
83 "America/Grenada",
84 "America/Guadeloupe",
85 "America/Halifax",
86 "America/Kralendijk",
87 "America/Lower_Princes",
88 "America/Marigot",
89 "America/Martinique",
90 "America/Moncton",
91 "America/Montserrat",
92 "America/Port_of_Spain",
93 "America/Puerto_Rico",
94 "America/Santo_Domingo",
95 "America/St_Barthelemy",
96 "America/St_Kitts",
97 "America/St_Lucia",
98 "America/St_Thomas",
99 "America/St_Vincent",
100 "America/Thule",
101 "America/Tortola",
102 "America/Virgin",
103 "Asia/Aden",
104 "Asia/Baghdad",
105 "Asia/Bahrain",
106 "Asia/Kuwait",
107 "Asia/Qatar",
108 "Asia/Riyadh",
109 "Atlantic/Bermuda",
110 "Canada/Atlantic",
111 "Antarctica/Casey",
112 "Australia/Perth",
113 "Australia/West",
114 "Atlantic/Azores",
115 "Asia/Baku",
116 "Asia/Dacca",
117 "Asia/Dhaka",
118 "Asia/Brunei",
119 "America/La_Paz",
120 "America/Araguaina",
121 "America/Bahia",
122 "America/Belem",
123 "America/Fortaleza",
124 "America/Maceio",
125 "America/Recife",
126 "America/Santarem",
127 "America/Sao_Paulo",
128 "Brazil/East",
129 "Pacific/Bougainville",
130 "Asia/Thimbu",
131 "Asia/Thimphu",
132 "Africa/Blantyre",
133 "Africa/Bujumbura",
134 "Africa/Gaborone",
135 "Africa/Harare",
136 "Africa/Kigali",
137 "Africa/Lubumbashi",
138 "Africa/Lusaka",
139 "Africa/Maputo",
140 "Indian/Cocos",
141 "Africa/Algiers",
142 "Africa/Ceuta",
143 "Africa/Tunis",
144 "Arctic/Longyearbyen",
145 "Atlantic/Jan_Mayen",
146 "CET",
147 "Europe/Amsterdam",
148 "Europe/Andorra",
149 "Europe/Belgrade",
150 "Europe/Berlin",
151 "Europe/Bratislava",
152 "Europe/Brussels",
153 "Europe/Budapest",
154 "Europe/Busingen",
155 "Europe/Copenhagen",
156 "Europe/Gibraltar",
157 "Europe/Ljubljana",
158 "Europe/Luxembourg",
159 "Europe/Madrid",
160 "Europe/Malta",
161 "Europe/Monaco",
162 "Europe/Oslo",
163 "Europe/Paris",
164 "Europe/Podgorica",
165 "Europe/Prague",
166 "Europe/Rome",
167 "Europe/San_Marino",
168 "Europe/Sarajevo",
169 "Europe/Skopje",
170 "Europe/Stockholm",
171 "Europe/Tirane",
172 "Europe/Vaduz",
173 "Europe/Vatican",
174 "Europe/Vienna",
175 "Europe/Warsaw",
176 "Europe/Zagreb",
177 "Europe/Zurich",
178 "Poland",
179 "NZ-CHAT",
180 "Pacific/Chatham",
181 "Asia/Choibalsan",
182 "Pacific/Chuuk",
183 "Pacific/Truk",
184 "Pacific/Yap",
185 "Pacific/Rarotonga",
186 "America/Santiago",
187 "Antarctica/Palmer",
188 "Chile/Continental",
189 "America/Bogota",
190 "America/Bahia_Banderas",
191 "America/Belize",
192 "America/Chicago",
193 "America/Costa_Rica",
194 "America/El_Salvador",
195 "America/Guatemala",
196 "America/Havana",
197 "America/Indiana/Knox",
198 "America/Indiana/Tell_City",
199 "America/Knox_IN",
200 "America/Managua",
201 "America/Matamoros",
202 "America/Menominee",
203 "America/Merida",
204 "America/Mexico_City",
205 "America/Monterrey",
206 "America/North_Dakota/Beulah",
207 "America/North_Dakota/Center",
208 "America/North_Dakota/New_Salem",
209 "America/Rainy_River",
210 "America/Rankin_Inlet",
211 "America/Regina",
212 "America/Resolute",
213 "America/Swift_Current",
214 "America/Tegucigalpa",
215 "America/Winnipeg",
216 "Asia/Chongqing",
217 "Asia/Chungking",
218 "Asia/Harbin",
219 "Asia/Macao",
220 "Asia/Macau",
221 "Asia/Shanghai",
222 "Asia/Taipei",
223 "CST6CDT",
224 "Canada/Central",
225 "Canada/Saskatchewan",
226 "Cuba",
227 "Mexico/General",
228 "PRC",
229 "ROC",
230 "US/Central",
231 "US/Indiana-Starke",
232 "Atlantic/Cape_Verde",
233 "Indian/Christmas",
234 "Pacific/Guam",
235 "Pacific/Saipan",
236 "Antarctica/Davis",
237 "Antarctica/DumontDUrville",
238 "Chile/EasterIsland",
239 "Pacific/Easter",
240 "Africa/Asmara",
241 "Africa/Asmera",
242 "Africa/Dar_es_Salaam",
243 "Africa/Djibouti",
244 "Africa/Juba",
245 "Africa/Kampala",
246 "Africa/Khartoum",
247 "Africa/Mogadishu",
248 "Africa/Nairobi",
249 "Indian/Antananarivo",
250 "Indian/Comoro",
251 "Indian/Mayotte",
252 "America/Guayaquil",
253 "Africa/Cairo",
254 "Africa/Tripoli",
255 "Asia/Amman",
256 "Asia/Beirut",
257 "Asia/Damascus",
258 "Asia/Gaza",
259 "Asia/Hebron",
260 "Asia/Istanbul",
261 "Asia/Nicosia",
262 "EET",
263 "Egypt",
264 "Europe/Athens",
265 "Europe/Bucharest",
266 "Europe/Chisinau",
267 "Europe/Helsinki",
268 "Europe/Istanbul",
269 "Europe/Kaliningrad",
270 "Europe/Kiev",
271 "Europe/Mariehamn",
272 "Europe/Nicosia",
273 "Europe/Riga",
274 "Europe/Sofia",
275 "Europe/Tallinn",
276 "Europe/Tiraspol",
277 "Europe/Uzhgorod",
278 "Europe/Vilnius",
279 "Europe/Zaporozhye",
280 "Libya",
281 "Turkey",
282 "America/Scoresbysund",
283 "America/Atikokan",
284 "America/Cancun",
285 "America/Cayman",
286 "America/Coral_Harbour",
287 "America/Detroit",
288 "America/Fort_Wayne",
289 "America/Indiana/Indianapolis",
290 "America/Indiana/Marengo",
291 "America/Indiana/Petersburg",
292 "America/Indiana/Vevay",
293 "America/Indiana/Vincennes",
294 "America/Indiana/Winamac",
295 "America/Indianapolis",
296 "America/Iqaluit",
297 "America/Jamaica",
298 "America/Kentucky/Louisville",
299 "America/Kentucky/Monticello",
300 "America/Louisville",
301 "America/Montreal",
302 "America/Nassau",
303 "America/New_York",
304 "America/Nipigon",
305 "America/Panama",
306 "America/Pangnirtung",
307 "America/Port-au-Prince",
308 "America/Thunder_Bay",
309 "America/Toronto",
310 "Canada/Eastern",
311 "EST",
312 "EST5EDT",
313 "Jamaica",
314 "US/East-Indiana",
315 "US/Eastern",
316 "US/Michigan",
317 "Pacific/Fiji",
318 "Atlantic/Stanley",
319 "America/Noronha",
320 "Brazil/DeNoronha",
321 "Pacific/Galapagos",
322 "Pacific/Gambier",
323 "Asia/Tbilisi",
324 "America/Cayenne",
325 "Pacific/Tarawa",
326 "Africa/Abidjan",
327 "Africa/Accra",
328 "Africa/Bamako",
329 "Africa/Banjul",
330 "Africa/Bissau",
331 "Africa/Conakry",
332 "Africa/Dakar",
333 "Africa/Freetown",
334 "Africa/Lome",
335 "Africa/Monrovia",
336 "Africa/Nouakchott",
337 "Africa/Ouagadougou",
338 "Africa/Sao_Tome",
339 "Africa/Timbuktu",
340 "America/Danmarkshavn",
341 "Atlantic/Reykjavik",
342 "Atlantic/St_Helena",
343 "Eire",
344 "Etc/GMT",
345 "Etc/GMT+0",
346 "Etc/GMT-0",
347 "Etc/GMT0",
348 "Etc/Greenwich",
349 "Europe/Belfast",
350 "Europe/Dublin",
351 "Europe/Guernsey",
352 "Europe/Isle_of_Man",
353 "Europe/Jersey",
354 "Europe/London",
355 "GB",
356 "GB-Eire",
357 "GMT",
358 "GMT+0",
359 "GMT-0",
360 "GMT0",
361 "Greenwich",
362 "Iceland",
363 "Etc/GMT+1",
364 "Etc/GMT+10",
365 "Etc/GMT+11",
366 "Etc/GMT+12",
367 "Etc/GMT+2",
368 "Etc/GMT+3",
369 "Etc/GMT+4",
370 "Etc/GMT+5",
371 "Etc/GMT+6",
372 "Etc/GMT+7",
373 "Etc/GMT+8",
374 "Etc/GMT+9",
375 "Etc/GMT-1",
376 "Etc/GMT-10",
377 "Etc/GMT-11",
378 "Etc/GMT-12",
379 "Etc/GMT-13",
380 "Etc/GMT-14",
381 "Etc/GMT-2",
382 "Etc/GMT-3",
383 "Etc/GMT-4",
384 "Etc/GMT-5",
385 "Etc/GMT-6",
386 "Etc/GMT-7",
387 "Etc/GMT-8",
388 "Etc/GMT-9",
389 "Asia/Dubai",
390 "Asia/Muscat",
391 "Atlantic/South_Georgia",
392 "America/Guyana",
393 "Asia/Hong_Kong",
394 "Hongkong",
395 "Asia/Hovd",
396 "America/Adak",
397 "America/Atka",
398 "HST",
399 "Pacific/Honolulu",
400 "Pacific/Johnston",
401 "US/Aleutian",
402 "US/Hawaii",
403 "Asia/Bangkok",
404 "Asia/Ho_Chi_Minh",
405 "Asia/Phnom_Penh",
406 "Asia/Saigon",
407 "Asia/Vientiane",
408 "Indian/Chagos",
409 "Asia/Chita",
410 "Asia/Irkutsk",
411 "Asia/Tehran",
412 "Iran",
413 "Asia/Calcutta",
414 "Asia/Colombo",
415 "Asia/Jerusalem",
416 "Asia/Kolkata",
417 "Asia/Tel_Aviv",
418 "Israel",
419 "Asia/Tokyo",
420 "Japan",
421 "Asia/Bishkek",
422 "Pacific/Kosrae",
423 "Asia/Krasnoyarsk",
424 "Asia/Novokuznetsk",
425 "Asia/Pyongyang",
426 "Asia/Seoul",
427 "ROK",
428 "Australia/LHI",
429 "Australia/Lord_Howe",
430 "Pacific/Kiritimati",
431 "Asia/Magadan",
432 "Pacific/Marquesas",
433 "Antarctica/Mawson",
434 "MET",
435 "Kwajalein",
436 "Pacific/Kwajalein",
437 "Pacific/Majuro",
438 "Antarctica/Macquarie",
439 "Asia/Rangoon",
440 "Europe/Minsk",
441 "Europe/Moscow",
442 "Europe/Simferopol",
443 "Europe/Volgograd",
444 "W-SU",
445 "America/Boise",
446 "America/Cambridge_Bay",
447 "America/Chihuahua",
448 "America/Creston",
449 "America/Dawson_Creek",
450 "America/Denver",
451 "America/Edmonton",
452 "America/Fort_Nelson",
453 "America/Hermosillo",
454 "America/Inuvik",
455 "America/Mazatlan",
456 "America/Ojinaga",
457 "America/Phoenix",
458 "America/Shiprock",
459 "America/Yellowknife",
460 "Canada/Mountain",
461 "MST",
462 "MST7MDT",
463 "Mexico/BajaSur",
464 "Navajo",
465 "US/Arizona",
466 "US/Mountain",
467 "Indian/Mauritius",
468 "Indian/Maldives",
469 "Asia/Kuala_Lumpur",
470 "Asia/Kuching",
471 "Pacific/Noumea",
472 "Pacific/Norfolk",
473 "Asia/Novosibirsk",
474 "Asia/Kathmandu",
475 "Asia/Katmandu",
476 "Pacific/Nauru",
477 "America/St_Johns",
478 "Canada/Newfoundland",
479 "Pacific/Niue",
480 "Antarctica/McMurdo",
481 "Antarctica/South_Pole",
482 "NZ",
483 "Pacific/Auckland",
484 "Asia/Omsk",
485 "Asia/Oral",
486 "America/Lima",
487 "Asia/Kamchatka",
488 "Pacific/Port_Moresby",
489 "Pacific/Enderbury",
490 "Asia/Manila",
491 "Asia/Karachi",
492 "America/Miquelon",
493 "Pacific/Pohnpei",
494 "Pacific/Ponape",
495 "America/Dawson",
496 "America/Ensenada",
497 "America/Los_Angeles",
498 "America/Metlakatla",
499 "America/Santa_Isabel",
500 "America/Tijuana",
501 "America/Vancouver",
502 "America/Whitehorse",
503 "Canada/Pacific",
504 "Canada/Yukon",
505 "Mexico/BajaNorte",
506 "PST8PDT",
507 "Pacific/Pitcairn",
508 "US/Pacific",
509 "Pacific/Palau",
510 "America/Asuncion",
511 "Asia/Qyzylorda",
512 "Indian/Reunion",
513 "Antarctica/Rothera",
514 "Asia/Sakhalin",
515 "Europe/Samara",
516 "Africa/Johannesburg",
517 "Africa/Maseru",
518 "Africa/Mbabane",
519 "Pacific/Guadalcanal",
520 "Indian/Mahe",
521 "Asia/Singapore",
522 "Singapore",
523 "Asia/Srednekolymsk",
524 "America/Paramaribo",
525 "Pacific/Midway",
526 "Pacific/Pago_Pago",
527 "Pacific/Samoa",
528 "US/Samoa",
529 "Antarctica/Syowa",
530 "Pacific/Tahiti",
531 "Indian/Kerguelen",
532 "Asia/Dushanbe",
533 "Pacific/Fakaofo",
534 "Asia/Dili",
535 "Asia/Ashgabat",
536 "Asia/Ashkhabad",
537 "Pacific/Tongatapu",
538 "Pacific/Funafuti",
539 "Etc/UCT",
540 "UCT",
541 "Asia/Ulaanbaatar",
542 "Asia/Ulan_Bator",
543 "Antarctica/Troll",
544 "Etc/UTC",
545 "Etc/Universal",
546 "Etc/Zulu",
547 "UTC",
548 "Universal",
549 "Zulu",
550 "America/Montevideo",
551 "Asia/Samarkand",
552 "Asia/Tashkent",
553 "America/Caracas",
554 "Asia/Ust-Nera",
555 "Asia/Vladivostok",
556 "Antarctica/Vostok",
557 "Pacific/Efate",
558 "Pacific/Wake",
559 "Africa/Windhoek",
560 "Africa/Bangui",
561 "Africa/Brazzaville",
562 "Africa/Douala",
563 "Africa/Kinshasa",
564 "Africa/Lagos",
565 "Africa/Libreville",
566 "Africa/Luanda",
567 "Africa/Malabo",
568 "Africa/Ndjamena",
569 "Africa/Niamey",
570 "Africa/Porto-Novo",
571 "Africa/Casablanca",
572 "Africa/El_Aaiun",
573 "Atlantic/Canary",
574 "Atlantic/Faeroe",
575 "Atlantic/Faroe",
576 "Atlantic/Madeira",
577 "Europe/Lisbon",
578 "Portugal",
579 "WET",
580 "Pacific/Wallis",
581 "America/Godthab",
582 "Asia/Jakarta",
583 "Asia/Pontianak",
584 "Asia/Jayapura",
585 "Asia/Makassar",
586 "Asia/Ujung_Pandang",
587 "Pacific/Apia",
588 "Asia/Kashgar",
589 "Asia/Urumqi",
590 "Asia/Khandyga",
591 "Asia/Yakutsk",
592 "Asia/Yekaterinburg",
593}
594
595// These example values must use the reference time "Mon Jan 2 15:04:05 MST 2006"
596// as described at https://gobyexample.com/time-formatting-parsing
597const (
598 BaseDateFormat = "2006-01-02"
599 TimeFormat = "15:04:05"
600 MonthFormat = "January"
601 YearFormat = "2006"
602 DayFormat = "Monday"
603 DayOfMonthFormat = "_2"
604 TimePeriodFormat = "PM"
605)
606
607// A DateTimer contains random Time generators, returning time string in certain particular format
608type DateTimer interface {
609 UnixTime(v reflect.Value) (interface{}, error)
610 Date(v reflect.Value) (interface{}, error)
611 Time(v reflect.Value) (interface{}, error)
612 MonthName(v reflect.Value) (interface{}, error)
613 Year(v reflect.Value) (interface{}, error)
614 DayOfWeek(v reflect.Value) (interface{}, error)
615 DayOfMonth(v reflect.Value) (interface{}, error)
616 Timestamp(v reflect.Value) (interface{}, error)
617 Century(v reflect.Value) (interface{}, error)
618 TimeZone(v reflect.Value) (interface{}, error)
619 TimePeriod(v reflect.Value) (interface{}, error)
620}
621
622// GetDateTimer returns a new DateTimer interface of DateTime
623func GetDateTimer() DateTimer {
624 date := &DateTime{}
625 return date
626}
627
628// DateTime struct
629type DateTime struct {
630}
631
632func (d DateTime) unixtime() int64 {
633 return RandomUnixTime()
634}
635
636// UnixTime get unix time
637func (d DateTime) UnixTime(v reflect.Value) (interface{}, error) {
638 kind := v.Kind()
639 var val int64
640 if kind == reflect.Int64 {
641 val = d.unixtime()
642 } else {
643 val = 0
644 }
645
646 return val, nil
647}
648
649// UnixTime get unix time randomly
650func UnixTime(opts ...options.OptionFunc) int64 {
651 return singleFakeData(UnixTimeTag, func() interface{} {
652 datetime := DateTime{}
653 return datetime.unixtime()
654 }, opts...).(int64)
655}
656
657func (d DateTime) date() string {
658 return time.Unix(RandomUnixTime(), 0).Format(BaseDateFormat)
659}
660
661// Date formats DateTime using example BaseDateFormat const
662func (d DateTime) Date(v reflect.Value) (interface{}, error) {
663 return d.date(), nil
664}
665
666// Date get fake date in string randomly
667func Date(opts ...options.OptionFunc) string {
668 return singleFakeData(DATE, func() interface{} {
669 datetime := DateTime{}
670 return datetime.date()
671 }, opts...).(string)
672}
673
674func (d DateTime) time() string {
675 return time.Unix(RandomUnixTime(), 0).Format(TimeFormat)
676}
677
678// Time formats DateTime using example Time const
679func (d DateTime) Time(v reflect.Value) (interface{}, error) {
680 return d.time(), nil
681}
682
683// TimeString get time randomly in string format
684func TimeString(opts ...options.OptionFunc) string {
685 return singleFakeData(TIME, func() interface{} {
686 datetime := DateTime{}
687 return datetime.time()
688 }, opts...).(string)
689}
690
691func (d DateTime) monthName() string {
692 return time.Unix(RandomUnixTime(), 0).Format(MonthFormat)
693}
694
695// MonthName formats DateTime using example Month const
696func (d DateTime) MonthName(v reflect.Value) (interface{}, error) {
697 return d.monthName(), nil
698}
699
700// MonthName get month name randomly in string format
701func MonthName(opts ...options.OptionFunc) string {
702 return singleFakeData(MonthNameTag, func() interface{} {
703 datetime := DateTime{}
704 return datetime.monthName()
705 }, opts...).(string)
706}
707
708func (d DateTime) year() string {
709 return time.Unix(RandomUnixTime(), 0).Format(YearFormat)
710}
711
712// Year formats DateTime using example Year const
713func (d DateTime) Year(v reflect.Value) (interface{}, error) {
714 return d.year(), nil
715}
716
717// YearString get year randomly in string format
718func YearString(opts ...options.OptionFunc) string {
719 return singleFakeData(YEAR, func() interface{} {
720 datetime := DateTime{}
721 return datetime.year()
722 }, opts...).(string)
723}
724
725func (d DateTime) dayOfWeek() string {
726 return time.Unix(RandomUnixTime(), 0).Format(DayFormat)
727}
728
729// DayOfWeek formats DateTime using example Day const
730func (d DateTime) DayOfWeek(v reflect.Value) (interface{}, error) {
731 return d.dayOfWeek(), nil
732}
733
734// DayOfWeek get day of week randomly in string format
735func DayOfWeek(opts ...options.OptionFunc) string {
736 return singleFakeData(DayOfWeekTag, func() interface{} {
737 datetime := DateTime{}
738 return datetime.dayOfWeek()
739 }, opts...).(string)
740}
741
742func (d DateTime) dayOfMonth() string {
743 return time.Unix(RandomUnixTime(), 0).Format(DayOfMonthFormat)
744}
745
746// DayOfMonth formats DateTime using example DayOfMonth const
747func (d DateTime) DayOfMonth(v reflect.Value) (interface{}, error) {
748 return d.dayOfMonth(), nil
749}
750
751// DayOfMonth get month randomly in string format
752func DayOfMonth(opts ...options.OptionFunc) string {
753 return singleFakeData(DayOfMonthTag, func() interface{} {
754 datetime := DateTime{}
755 return datetime.dayOfMonth()
756 }, opts...).(string)
757}
758
759func (d DateTime) timestamp() string {
760 return time.Unix(RandomUnixTime(), 0).Format(fmt.Sprintf("%s %s", BaseDateFormat, TimeFormat))
761}
762
763// Timestamp formats DateTime using example Timestamp const
764func (d DateTime) Timestamp(v reflect.Value) (interface{}, error) {
765 return d.timestamp(), nil
766}
767
768// Timestamp get timestamp randomly in string format: 2006-01-02 15:04:05
769func Timestamp(opts ...options.OptionFunc) string {
770 return singleFakeData(TIMESTAMP, func() interface{} {
771 datetime := DateTime{}
772 return datetime.timestamp()
773 }, opts...).(string)
774}
775
776func (d DateTime) century() string {
777 return randomElementFromSliceString(century)
778}
779
780// Century returns a random century
781func (d DateTime) Century(v reflect.Value) (interface{}, error) {
782 return d.century(), nil
783}
784
785// Century get century randomly in string
786func Century(opts ...options.OptionFunc) string {
787 return singleFakeData(CENTURY, func() interface{} {
788 datetime := DateTime{}
789 return datetime.century()
790 }, opts...).(string)
791}
792
793func (d DateTime) timezone() string {
794 return randomElementFromSliceString(timezones)
795}
796
797// TimeZone returns a random timezone
798func (d DateTime) TimeZone(v reflect.Value) (interface{}, error) {
799 return d.timezone(), nil
800}
801
802// Timezone get timezone randomly in string
803func Timezone(opts ...options.OptionFunc) string {
804 return singleFakeData(TIMEZONE, func() interface{} {
805 datetime := DateTime{}
806 return datetime.timezone()
807 }, opts...).(string)
808}
809
810func (d DateTime) period() string {
811 return time.Unix(RandomUnixTime(), 0).Format(TimePeriodFormat)
812}
813
814// TimePeriod formats DateTime using example TimePeriod const
815func (d DateTime) TimePeriod(v reflect.Value) (interface{}, error) {
816 return d.period(), nil
817}
818
819// Timeperiod get timeperiod randomly in string (AM/PM)
820func Timeperiod(opts ...options.OptionFunc) string {
821 return singleFakeData(TimePeriodTag, func() interface{} {
822 datetime := DateTime{}
823 return datetime.period()
824 }, opts...).(string)
825}
826
827// RandomUnixTime is a helper function returning random Unix time
828func RandomUnixTime() int64 {
829 return rand.Int63n(time.Now().Unix())
830}