This repository has been archived by the owner on Jun 2, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCPDate-MCResourceAdditions.j
94 lines (73 loc) · 2.09 KB
/
CPDate-MCResourceAdditions.j
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
var MCDateTimeRegExp = new RegExp(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(([-+])(\d{2}):(\d{2})|Z)/);
// Inspired by http://delete.me.uk/2005/03/iso8601.html
var zeropad = function (num) { return ((num < 10) ? '0' : '') + num; }
@implementation CPDate (MCResourceAdditions)
// Create a CPDate object directly from the ISO string or whatever Rails uses
+ (CPDate)dateWithDateTimeString:(CPString)aDateTime
{
if(!aDateTime || [aDateTime isKindOfClass:[CPNull class]])
return nil;
var dateParts = aDateTime.match(MCDateTimeRegExp),
date = new Date(dateParts[1], dateParts[2] - 1, dateParts[3], dateParts[4], dateParts[5], dateParts[6]),
timeZoneOffset;
if(dateParts[7] != 'Z')
timeZoneOffset = (Number(dateParts[9]) * 60 + Number(dateParts[10])) * (dateParts[8] === '-' ? -1 : 1);
else
timeZoneOffset = -2 * date.getTimezoneOffset();
self = new Date(date.getTime() + (timeZoneOffset + date.getTimezoneOffset()) * 60 * 1000);
return self;
}
- (int)year
{
return self.getFullYear();
}
- (CPString)twoDigitYear
{
return self.getFullYear().toString().substring(2,4);
}
- (int)month
{
return self.getMonth() + 1;
}
- (CPString)twoDigitMonth
{
var month = [self month];
return zeropad(month);
}
- (CPString)humanMonth
{
return MCResourceMonthNames[[self month] - 1];
}
- (int)day
{
return self.getDate();
}
- (CPString)twoDigitDay
{
var day = self.getDate();
return zeropad(day);
}
- (CPString)twoDigitHour
{
var hours = self.getHours();
return zeropad(hours);
}
- (CPString)twoDigitMinute
{
var minutes = self.getMinutes();
return zeropad(minutes);
}
- (CPString)shortDate
{
return [self twoDigitDay] + "." + [self twoDigitMonth] + "." + [self twoDigitYear];
}
- (CPString)ISO8601String
{
var isoString = self.getUTCFullYear() + "-" +
zeropad(self.getUTCMonth() + 1) + "-" +
zeropad(self.getUTCDate()) + "T" +
zeropad(self.getUTCHours()) + ":" + zeropad(self.getUTCMinutes()) + ":" + zeropad(self.getUTCSeconds()) +
"Z";
return isoString;
}
@end