@@ -41,7 +41,11 @@ class DateTools {
41
41
" January" , " February" , " March" , " April" , " May" , " June" , " July" , " August" , " September" , " October" , " November" , " December"
42
42
];
43
43
44
- private static function __format_get (d : Date , e : String ): String {
44
+ private static inline function __format_pad (v : Int , p : Bool , c : String = " 0" , l : Int = 2 ): String {
45
+ return p ? StringTools .lpad (Std .string (v ), c , l ) : Std .string (v );
46
+ }
47
+
48
+ private static function __format_get (d : Date , e : String , p : Bool = false ): String {
45
49
return switch (e ) {
46
50
case " %" :
47
51
" %" ;
@@ -54,24 +58,26 @@ class DateTools {
54
58
case " B" :
55
59
MONTH_NAMES [d .getMonth ()];
56
60
case " C" :
57
- StringTools . lpad (Std .string ( Std . int (d .getFullYear () / 100 )), " 0 " , 2 );
61
+ __format_pad (Std .int (d .getFullYear () / 100 ), p );
58
62
case " d" :
59
- StringTools . lpad ( Std . string ( d .getDate ()), " 0 " , 2 );
63
+ __format_pad ( d .getDate (), p );
60
64
case " D" :
61
65
__format (d , " %m/%d/%y" );
62
66
case " e" :
63
67
Std .string (d .getDate ());
64
68
case " F" :
65
69
__format (d , " %Y-%m-%d" );
66
70
case " H" , " k" :
67
- StringTools .lpad (Std .string (d .getHours ()), if (e == " H" ) " 0" else " " , 2 );
71
+ __format_pad (d .getHours (), p , if (e == " H" ) " 0" else " " );
72
+ case " j" :
73
+ __format_pad (getDayOfYear (d ), p , " 0" , 3 );
68
74
case " I" , " l" :
69
75
var hour = d .getHours () % 12 ;
70
- StringTools . lpad ( Std . string ( hour == 0 ? 12 : hour ), if (e == " I" ) " 0" else " " , 2 );
76
+ __format_pad ( hour == 0 ? 12 : hour , p , if (e == " I" ) " 0" else " " );
71
77
case " m" :
72
- StringTools . lpad ( Std . string ( d .getMonth () + 1 ), " 0 " , 2 );
78
+ __format_pad ( d .getMonth () + 1 , p );
73
79
case " M" :
74
- StringTools . lpad ( Std . string ( d .getMinutes ()), " 0 " , 2 );
80
+ __format_pad ( d .getMinutes (), p );
75
81
case " n" :
76
82
" \n " ;
77
83
case " p" :
@@ -83,7 +89,7 @@ class DateTools {
83
89
case " s" :
84
90
Std .string (Std .int (d .getTime () / 1000 ));
85
91
case " S" :
86
- StringTools . lpad ( Std . string ( d .getSeconds ()), " 0 " , 2 );
92
+ __format_pad ( d .getSeconds (), p );
87
93
case " t" :
88
94
" \t " ;
89
95
case " T" :
@@ -94,7 +100,7 @@ class DateTools {
94
100
case " w" :
95
101
Std .string (d .getDay ());
96
102
case " y" :
97
- StringTools . lpad ( Std . string ( d .getFullYear () % 100 ), " 0 " , 2 );
103
+ __format_pad ( d .getFullYear () % 100 , p );
98
104
case " Y" :
99
105
Std .string (d .getFullYear ());
100
106
default :
@@ -105,15 +111,23 @@ class DateTools {
105
111
private static function __format (d : Date , f : String ): String {
106
112
var r = new StringBuf ();
107
113
var p = 0 ;
114
+ var pad : Bool ;
108
115
while (true ) {
109
116
var np = f .indexOf (" %" , p );
110
117
if (np < 0 )
111
118
break ;
112
119
113
120
r .addSub (f , p , np - p );
114
- r .add (__format_get (d , f .substr (np + 1 , 1 )));
115
-
116
- p = np + 2 ;
121
+ var c = f .substr (np + 1 , 1 );
122
+ if (c == " -" ) {
123
+ c = f .substr (np + 2 , 1 );
124
+ p = np + 3 ;
125
+ pad = false ;
126
+ } else {
127
+ p = np + 2 ;
128
+ pad = true ;
129
+ }
130
+ r .add (__format_get (d , c , pad ));
117
131
}
118
132
r .addSub (f , p , f .length - p );
119
133
return r .toString ();
@@ -179,6 +193,14 @@ class DateTools {
179
193
return if (isB ) 29 else 28 ;
180
194
}
181
195
196
+ /**
197
+ Returns the number of days since the beginning of the year.
198
+ **/
199
+ public static function getDayOfYear (d : Date ): Int {
200
+ var t = new Date (d .getFullYear (), 0 , 0 , 0 , 0 , 0 );
201
+ return Std .int ((d .getTime () - t .getTime ()) / DateTools .days (1 )) + 1 ;
202
+ }
203
+
182
204
/**
183
205
Converts a number of seconds to a timestamp.
184
206
**/
0 commit comments