1Rose::DB::Object::MakeMUestehrodCso:n:tDraitbeu(t3e)d PeRrolseD:o:cDuBm:e:nOtbajteicotn::MakeMethods::Date(3)
2
3
4
6 Rose::DB::Object::MakeMethods::Date - Create date-related methods for
7 Rose::DB::Object-derived objects.
8
10 package MyDBObject;
11
12 use base 'Rose::DB::Object';
13
14 use Rose::DB::Object::MakeMethods::Date
15 (
16 date =>
17 [
18 'start_date',
19 'end_date' => { default => '2005-01-30' }
20 ],
21
22 datetime =>
23 [
24 'date_created',
25 'other_date' => { type => 'datetime year to minute' },
26 ],
27
28 timestamp =>
29 [
30 'last_modified' => { default => '2005-01-30 12:34:56.123' }
31 ],
32
33 epoch =>
34 [
35 due_date => { default => '2003-01-02 12:34:56' },
36 event_start => { hires => 1 },
37 ],
38 );
39
40 ...
41
42 $o->start_date('2/3/2004 8am');
43 $dt = $o->start_date(truncate => 'day');
44
45 print $o->end_date(format => '%m/%d/%Y'); # 2005-01-30
46
47 $o->date_created('now');
48
49 $o->other_date('2001-02-20 12:34:56');
50
51 # 02/20/2001 12:34:00
52 print $o->other_date(format => '%m/%d/%Y %H:%M:%S');
53
54 print $o->last_modified(format => '%S.%5N'); # 56.12300
55
56 print $o->due_date(format => '%m/%d/%Y'); # 01/02/2003
57
58 $o->event_start('1980-10-11 6:00.123456');
59
61 "Rose::DB::Object::MakeMethods::Date" creates methods that deal with
62 dates, and inherits from Rose::Object::MakeMethods. See the
63 Rose::Object::MakeMethods documentation to learn about the interface.
64 The method types provided by this module are described below.
65
66 All method types defined by this module are designed to work with
67 objects that are subclasses of (or otherwise conform to the interface
68 of) Rose::DB::Object. In particular, the object is expected to have a
69 db method that returns a Rose::DB-derived object. See the
70 Rose::DB::Object documentation for more details.
71
73 date
74 Create get/set methods for date (year, month, day) attributes.
75
76 Options
77 "default"
78 Determines the default value of the attribute.
79
80 "hash_key"
81 The key inside the hash-based object to use for the storage
82 of this attribute. Defaults to the name of the method.
83
84 "interface"
85 Choose the interface. The default is "get_set".
86
87 "time_zone"
88 The time zone name, which must be in a format that is
89 understood by DateTime::TimeZone.
90
91 Interfaces
92 "get_set"
93 Creates a get/set method for a date (year, month, day)
94 attribute. When setting the attribute, the value is passed
95 through the parse_date method of the object's db attribute.
96 If that fails, the value is passed to
97 Rose::DateTime::Util's parse_date() function. If that
98 fails, a fatal error will occur.
99
100 The time zone of the DateTime object that results from a
101 successful parse is set to the value of the "time_zone"
102 option, if defined. Otherwise, it is set to the
103 server_time_zone value of the object's db attribute using
104 DateTime's set_time_zone method.
105
106 When saving to the database, the method will pass the
107 attribute value through the format_date method of the
108 object's db attribute before returning it. Otherwise, the
109 value is returned as-is.
110
111 This method is designed to allow date values to make a
112 round trip from and back into the database without ever
113 being "inflated" into DateTime objects. Any use of the
114 attribute (get or set) outside the context of loading from
115 or saving to the database will cause the value to be
116 "inflated" using the parse_date method of the object's db
117 attribute. If that fails, Rose::DateTime::Util's
118 parse_date() function is tried. If that fails, a fatal
119 error will occur.
120
121 If passed two arguments and the first argument is "format",
122 then the second argument is taken as a format string and
123 passed to Rose::DateTime::Util's format_date function along
124 with the current value of the date attribute. Example:
125
126 $o->start_date('2004-05-22');
127 print $o->start_date(format => '%A'); # "Saturday"
128
129 If passed two arguments and the first argument is
130 "truncate", then the second argument is taken as the value
131 of the "to" argument to DateTime's truncate method, which
132 is applied to a clone of the current value of the date
133 attribute, which is then returned. Example:
134
135 $o->start_date('2004-05-22');
136
137 # Equivalent to:
138 # $d = $o->start_date->clone->truncate(to => 'month')
139 $d = $o->start_date(truncate => 'month');
140
141 If the date attribute is undefined, then undef is returned
142 (i.e., no clone or call to truncate is made).
143
144 If a valid date keyword is passed as an argument, the value
145 will never be "inflated" but rather passed to the database
146 and returned to other code unmodified. That means that the
147 "truncate" and "format" calls described above will also
148 return the date keyword unmodified. See the Rose::DB
149 documentation for more information on date keywords.
150
151 "get"
152 Creates an accessor method for a date (year, month, day)
153 attribute. This method behaves like the "get_set" method,
154 except that the value cannot be set.
155
156 "set"
157 Creates a mutator method for a date (year, month, day)
158 attribute. This method behaves like the "get_set" method,
159 except that a fatal error will occur if no arguments are
160 passed. It also does not support the "truncate" and
161 "format" parameters.
162
163 Example:
164
165 package MyDBObject;
166
167 use base 'Rose::DB::Object';
168
169 use Rose::DB::Object::MakeMethods::Date
170 (
171 date =>
172 [
173 'start_date',
174 'end_date' => { default => '2005-01-30' }
175 ],
176 );
177
178 ...
179
180 $o->start_date('2/3/2004');
181 $dt = $o->start_date(truncate => 'week');
182
183 print $o->end_date(format => '%m/%d/%Y'); # 01/30/2005
184
185 datetime
186 Create get/set methods for "datetime" (year, month, day, hour,
187 minute, second) attributes.
188
189 Options
190 "default"
191 Determines the default value of the attribute.
192
193 "hash_key"
194 The key inside the hash-based object to use for the storage
195 of this attribute. Defaults to the name of the method.
196
197 "interface"
198 Choose the interface. The default is "get_set".
199
200 "time_zone"
201 The time zone name, which must be in a format that is
202 understood by DateTime::TimeZone.
203
204 "type"
205 The datetime variant as a string. Each space in the string
206 is replaced with an underscore "_", then the string is
207 appended to "format_" and "parse_" in order to form the
208 names of the methods called on the object's db attribute to
209 format and parse datetime values. The default is
210 "datetime", which means that the "format_datetime()" and
211 "parse_datetime()" methods will be used.
212
213 Any string that results in a set of method names that are
214 supported by the object's db attribute is acceptable.
215 Check the documentation for the class of the object's db
216 attribute for a list of valid method names.
217
218 Interfaces
219 "get_set"
220 Creates a get/set method for a "datetime" attribute. The
221 exact granularity of the "datetime" value is determined by
222 the value of the "type" option (see above).
223
224 When setting the attribute, the value is passed through the
225 "parse_TYPE()" method of the object's db attribute, where
226 "TYPE" is the value of the "type" option. If that fails,
227 the value is passed to Rose::DateTime::Util's parse_date()
228 function. If that fails, a fatal error will occur.
229
230 The time zone of the DateTime object that results from a
231 successful parse is set to the value of the "time_zone"
232 option, if defined. Otherwise, it is set to the
233 server_time_zone value of the object's db attribute using
234 DateTime's set_time_zone method.
235
236 When saving to the database, the method will pass the
237 attribute value through the "format_TYPE()" method of the
238 object's db attribute before returning it, where "TYPE" is
239 the value of the "type" option. Otherwise, the value is
240 returned as-is.
241
242 This method is designed to allow datetime values to make a
243 round trip from and back into the database without ever
244 being "inflated" into DateTime objects. Any use of the
245 attribute (get or set) outside the context of loading from
246 or saving to the database will cause the value to be
247 "inflated" using the "parse_TYPE()" method of the object's
248 db attribute, where "TYPE" is the value of the "type"
249 option. If that fails, Rose::DateTime::Util's parse_date()
250 function is tried. If that fails, a fatal error will
251 occur.
252
253 If passed two arguments and the first argument is "format",
254 then the second argument is taken as a format string and
255 passed to Rose::DateTime::Util's format_date function along
256 with the current value of the datetime attribute. Example:
257
258 $o->start_date('2004-05-22 12:34:56');
259 print $o->start_date(format => '%A'); # "Saturday"
260
261 If passed two arguments and the first argument is
262 "truncate", then the second argument is taken as the value
263 of the "to" argument to DateTime's truncate method, which
264 is applied to a clone of the current value of the datetime
265 attribute, which is then returned. Example:
266
267 $o->start_date('2004-05-22 04:32:01');
268
269 # Equivalent to:
270 # $d = $o->start_date->clone->truncate(to => 'month')
271 $d = $o->start_date(truncate => 'month');
272
273 If the datetime attribute is undefined, then undef is
274 returned (i.e., no clone or call to truncate is made).
275
276 If a valid datetime keyword is passed as an argument, the
277 value will never be "inflated" but rather passed to the
278 database and returned to other code unmodified. That means
279 that the "truncate" and "format" calls described above will
280 also return the datetime keyword unmodified. See the
281 Rose::DB documentation for more information on datetime
282 keywords.
283
284 "get"
285 Creates an accessor method for a "datetime" attribute.
286 This method behaves like the "get_set" method, except that
287 the value cannot be set.
288
289 "set"
290 Creates a mutator method for a "datetime" attribute. This
291 method behaves like the "get_set" method, except that a
292 fatal error will occur if no arguments are passed. It also
293 does not support the "truncate" and "format" parameters.
294
295 Example:
296
297 package MyDBObject;
298
299 use base 'Rose::DB::Object';
300
301 use Rose::DB::Object::MakeMethods::Date
302 (
303 datetime =>
304 [
305 'start_date',
306 'end_date' => { default => '2005-01-30 12:34:56' }
307 'other_date' => { type => 'datetime year to minute' },
308 ],
309 );
310
311 ...
312
313 $o->start_date('2/3/2004 8am');
314 $dt = $o->start_date(truncate => 'day');
315
316 # 01/30/2005 12:34:56
317 print $o->end_date(format => '%m/%d/%Y %H:%M:%S');
318
319 $o->other_date('2001-02-20 12:34:56');
320
321 # 02/20/2001 12:34:00
322 print $o->other_date(format => '%m/%d/%Y %H:%M:%S');
323
324 epoch
325 Create get/set methods for an attribute that stores seconds since
326 the Unix epoch.
327
328 Options
329 "default"
330 Determines the default value of the attribute.
331
332 "hash_key"
333 The key inside the hash-based object to use for the storage
334 of this attribute. Defaults to the name of the method.
335
336 "hires"
337 A boolean flag that indicates whether or not epoch values
338 should be stored with fractional seconds. If true, then up
339 to six (6) digits past the decimal point are preserved.
340 The default is false.
341
342 "interface"
343 Choose the interface. The default is "get_set".
344
345 "time_zone"
346 The time zone name, which must be in a format that is
347 understood by DateTime::TimeZone.
348
349 Interfaces
350 "get_set"
351 Creates a get/set method for an attribute that stores
352 seconds since the Unix epoch. When setting the attribute,
353 the value is passed through Rose::DateTime::Util's
354 parse_date() function. If that fails, a fatal error will
355 occur.
356
357 The time zone of the DateTime object that results from a
358 successful parse is set to the value of the "time_zone"
359 option, if defined. Otherwise, it is set to the
360 server_time_zone value of the object's db attribute using
361 DateTime's set_time_zone method.
362
363 When saving to the database, the epoch or hires_epoch
364 method will be called on the DateTime object, depending on
365 the value of the "hires" option. (See above.)
366
367 This method is designed to allow values to make a round
368 trip from and back into the database without ever being
369 "inflated" into DateTime objects. Any use of the attribute
370 (get or set) outside the context of loading from or saving
371 to the database will cause the value to be "inflated" using
372 Rose::DateTime::Util's parse_date() function. If that
373 fails, a fatal error will occur.
374
375 If passed two arguments and the first argument is "format",
376 then the second argument is taken as a format string and
377 passed to Rose::DateTime::Util's format_date function along
378 with the current value of the attribute. Example:
379
380 $o->due_date('2004-05-22');
381 print $o->due_date(format => '%A'); # "Saturday"
382
383 If passed two arguments and the first argument is
384 "truncate", then the second argument is taken as the value
385 of the "to" argument to DateTime's truncate method, which
386 is applied to a clone of the current value of the
387 attribute, which is then returned. Example:
388
389 $o->due_date('2004-05-22');
390
391 # Equivalent to:
392 # $d = $o->due_date->clone->truncate(to => 'month')
393 $d = $o->due_date(truncate => 'month');
394
395 If the attribute is undefined, then undef is returned
396 (i.e., no clone or call to truncate is made).
397
398 "get"
399 Creates an accessor method an attribute that stores seconds
400 since the Unix epoch. This method behaves like the
401 "get_set" method, except that the value cannot be set.
402
403 "set"
404 Creates a mutator method for an attribute that stores
405 seconds since the Unix epoch. This method behaves like the
406 "get_set" method, except that a fatal error will occur if
407 no arguments are passed. It also does not support the
408 "truncate" and "format" parameters.
409
410 Example:
411
412 package MyDBObject;
413
414 use base 'Rose::DB::Object';
415
416 use Rose::DB::Object::MakeMethods::Date
417 (
418 epoch =>
419 [
420 due_date => { default => '2003-01-02 12:34:56' },
421 event_start => { hires => 1 },
422 ],
423 );
424
425 ...
426
427 print $o->due_date(format => '%m/%d/%Y'); # 01/02/2003
428 $dt = $o->due_date(truncate => 'week');
429
430 $o->event_start('1980-10-11 6:00.123456');
431 print $o->event_start(format => '%6N'); # 123456
432
433 timestamp
434 Create get/set methods for "timestamp" (year, month, day, hour,
435 minute, second, fractional seconds) attributes.
436
437 Options
438 "default"
439 Determines the default value of the attribute.
440
441 "hash_key"
442 The key inside the hash-based object to use for the storage
443 of this attribute. Defaults to the name of the method.
444
445 "interface"
446 Choose the interface. The default interface is "get_set".
447
448 "time_zone"
449 A time zone name, which must be in a format that is
450 understood by DateTime::TimeZone.
451
452 Interfaces
453 "get_set"
454 Creates a get/set method for a "timestamp" (year, month,
455 day, hour, minute, second, fractional seconds) attribute.
456 When setting the attribute, the value is passed through the
457 "parse_timestamp()" method of the object's db attribute.
458 If that fails, the value is passed to
459 Rose::DateTime::Util's parse_date() function. If that
460 fails, a fatal error will occur.
461
462 The time zone of the DateTime object that results from a
463 successful parse is set to the value of the "time_zone"
464 option, if defined. Otherwise, it is set to the
465 server_time_zone value of the object's db attribute using
466 DateTime's set_time_zone method.
467
468 When saving to the database, the method will pass the
469 attribute value through the format_timestamp method of the
470 object's db attribute before returning it. Otherwise, the
471 value is returned as-is.
472
473 This method is designed to allow timestamp values to make a
474 round trip from and back into the database without ever
475 being "inflated" into DateTime objects. Any use of the
476 attribute (get or set) outside the context of loading from
477 or saving to the database will cause the value to be
478 "inflated" using the "parse_timestamp()" method of the
479 object's db attribute. If that fails,
480 Rose::DateTime::Util's parse_date() function is tried. If
481 that fails, a fatal error will occur.
482
483 If passed two arguments and the first argument is "format",
484 then the second argument is taken as a format string and
485 passed to Rose::DateTime::Util's format_date function along
486 with the current value of the timestamp attribute.
487 Example:
488
489 $o->start_date('2004-05-22 12:34:56.123');
490 print $o->start_date(format => '%A'); # "Saturday"
491
492 If passed two arguments and the first argument is
493 "truncate", then the second argument is taken as the value
494 of the "to" argument to DateTime's truncate method, which
495 is applied to a clone of the current value of the timestamp
496 attribute, which is then returned. Example:
497
498 $o->start_date('2004-05-22 04:32:01.456');
499
500 # Equivalent to:
501 # $d = $o->start_date->clone->truncate(to => 'month')
502 $d = $o->start_date(truncate => 'month');
503
504 If the timestamp attribute is undefined, then undef is
505 returned (i.e., no clone or call to truncate is made).
506
507 If a valid timestamp keyword is passed as an argument, the
508 value will never be "inflated" but rather passed to the
509 database and returned to other code unmodified. That means
510 that the "truncate" and "format" calls described above will
511 also return the timestamp keyword unmodified. See the
512 Rose::DB documentation for more information on timestamp
513 keywords.
514
515 "get"
516 Creates an accessor method for a "timestamp" (year, month,
517 day, hour, minute, second, fractional seconds) attribute.
518 This method behaves like the "get_set" method, except that
519 the value cannot be set.
520
521 "set"
522 Creates a mutator method for a "timestamp" (year, month,
523 day, hour, minute, second, fractional seconds) attribute.
524 This method behaves like the "get_set" method, except that
525 a fatal error will occur if no arguments are passed. It
526 also does not support the "truncate" and "format"
527 parameters.
528
529 Example:
530
531 package MyDBObject;
532
533 use base 'Rose::DB::Object';
534
535 use Rose::DB::Object::MakeMethods::Date
536 (
537 timestamp =>
538 [
539 'start_date',
540 'end_date' => { default => '2005-01-30 12:34:56.123' }
541 ],
542 );
543
544 ...
545
546 $o->start_date('2/3/2004 8am');
547 $dt = $o->start_date(truncate => 'day');
548
549 # 01/30/2005 12:34:56.12300
550 print $o->end_date(format => '%m/%d/%Y %H:%M:%S.%5N');
551
552 timestamp_without_time_zone
553 This is identical to the timestamp method described above, but with
554 the "time_zone" parameter always set to the value "floating". Any
555 attempt to set the "time_zone" parameter explicitly will cause a
556 fatal error.
557
558 timestamp_with_time_zone
559 Create get/set methods for "timestamp with time zone" (year, month,
560 day, hour, minute, second, fractional seconds, time zone)
561 attributes.
562
563 Options
564 "default"
565 Determines the default value of the attribute.
566
567 "hash_key"
568 The key inside the hash-based object to use for the storage
569 of this attribute. Defaults to the name of the method.
570
571 "interface"
572 Choose the interface. The default interface is "get_set".
573
574 "time_zone"
575 A time zone name, which must be in a format that is
576 understood by DateTime::TimeZone.
577
578 Interfaces
579 "get_set"
580 Creates a get/set method for a "timestamp with time zone"
581 (year, month, day, hour, minute, second, fractional
582 seconds, time zone) attribute. When setting the attribute,
583 the value is passed through the
584 "parse_timestamp_with_timezone()" method of the object's db
585 attribute. If that fails, the value is passed to
586 Rose::DateTime::Util's parse_date() function. If that
587 fails, a fatal error will occur.
588
589 The time zone of the DateTime object will be set according
590 to the successful parse of the "timestamp with time zone"
591 value. If the "time_zone" option is set, then the time
592 zone of the DateTime object is set to this value. Note
593 that this happens after the successful parse, which means
594 that this operation may change the time and/or date
595 according to the difference between the time zone of the
596 value as originally parsed and the new time zone set
597 according to the "time_zone" option.
598
599 When saving to the database, the method will pass the
600 attribute value through the format_timestamp_with_timezone
601 method of the object's db attribute before returning it.
602 Otherwise, the value is returned as-is.
603
604 This method is designed to allow timestamp values to make a
605 round trip from and back into the database without ever
606 being "inflated" into DateTime objects. Any use of the
607 attribute (get or set) outside the context of loading from
608 or saving to the database will cause the value to be
609 "inflated" using the "parse_timestamp_with_time_zone()"
610 method of the object's db attribute. If that fails,
611 Rose::DateTime::Util's parse_date() function is tried. If
612 that fails, a fatal error will occur.
613
614 If passed two arguments and the first argument is "format",
615 then the second argument is taken as a format string and
616 passed to Rose::DateTime::Util's format_date function along
617 with the current value of the timestamp attribute.
618 Example:
619
620 $o->start_date('2004-05-22 12:34:56.123');
621 print $o->start_date(format => '%A'); # "Saturday"
622
623 If passed two arguments and the first argument is
624 "truncate", then the second argument is taken as the value
625 of the "to" argument to DateTime's truncate method, which
626 is applied to a clone of the current value of the timestamp
627 attribute, which is then returned. Example:
628
629 $o->start_date('2004-05-22 04:32:01.456');
630
631 # Equivalent to:
632 # $d = $o->start_date->clone->truncate(to => 'month')
633 $d = $o->start_date(truncate => 'month');
634
635 If the timestamp attribute is undefined, then undef is
636 returned (i.e., no clone or call to truncate is made).
637
638 If a valid timestamp keyword is passed as an argument, the
639 value will never be "inflated" but rather passed to the
640 database and returned to other code unmodified. That means
641 that the "truncate" and "format" calls described above will
642 also return the timestamp keyword unmodified. See the
643 Rose::DB documentation for more information on timestamp
644 keywords.
645
646 "get"
647 Creates an accessor method for a "timestamp with time zone"
648 (year, month, day, hour, minute, second, fractional
649 seconds, time zone) attribute. This method behaves like
650 the "get_set" method, except that the value cannot be set.
651
652 "set"
653 Creates a mutator method for a "timestamp with time zone"
654 (year, month, day, hour, minute, second, fractional
655 seconds, time zone) attribute. This method behaves like
656 the "get_set" method, except that a fatal error will occur
657 if no arguments are passed. It also does not support the
658 "truncate" and "format" parameters.
659
660 Example:
661
662 package MyDBObject;
663
664 use base 'Rose::DB::Object';
665
666 use Rose::DB::Object::MakeMethods::Date
667 (
668 timestamp_with_timezone =>
669 [
670 'start_date',
671 'end_date' => { default => '2005-01-30 12:34:56.123' }
672 ],
673 );
674
675 ...
676
677 $o->start_date('2/3/2004 8am');
678 $dt = $o->start_date(truncate => 'day');
679
680 # 01/30/2005 12:34:56.12300
681 print $o->end_date(format => '%m/%d/%Y %H:%M:%S.%5N');
682
684 John C. Siracusa (siracusa@gmail.com)
685
687 Copyright (c) 2010 by John C. Siracusa. All rights reserved. This
688 program is free software; you can redistribute it and/or modify it
689 under the same terms as Perl itself.
690
691
692
693perl v5.34.0 2021-07R-o2s2e::DB::Object::MakeMethods::Date(3)