diff --git a/app/views/shared/_publisher.html.haml b/app/views/shared/_publisher.html.haml
index 2c76eab50..4c8d86094 100644
--- a/app/views/shared/_publisher.html.haml
+++ b/app/views/shared/_publisher.html.haml
@@ -12,7 +12,7 @@
.content_creation
= form_for(StatusMessage.new) do |status|
= status.error_messages
- %p
+ %div
%params
#publisher_textarea_wrapper
= link_to( image_tag('deletelabel.png'), "#", :id => "hide_publisher", :title => t('.discard_post'))
diff --git a/public/javascripts/app/helpers/date_formatter.js b/public/javascripts/app/helpers/date_formatter.js
new file mode 100644
index 000000000..dbcb005b6
--- /dev/null
+++ b/public/javascripts/app/helpers/date_formatter.js
@@ -0,0 +1,35 @@
+(function(){
+ var dateFormatter = function dateFormatter() {
+
+ };
+
+ dateFormatter.parse = function(date_string) {
+ var timestamp = new Date(date_string).getTime();
+
+ if (isNaN(timestamp)) {
+ timestamp = dateFormatter.parseISO8601UTC(date_string);
+ }
+
+ return timestamp;
+ },
+
+ dateFormatter.parseISO8601UTC = function(date_string) {
+ var iso8601_utc_pattern = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(.(\d{3}))?Z$/;
+ var time_components = date_string.match(iso8601_utc_pattern);
+ var timestamp = 0;
+
+ if (time_components != null) {
+ if (time_components[8] == undefined) {
+ time_components[8] = 0;
+ }
+
+ timestamp = Date.UTC(time_components[1], time_components[2] - 1, time_components[3],
+ time_components[4], time_components[5], time_components[6],
+ time_components[8]);
+ }
+
+ return timestamp;
+ },
+
+ app.helpers.dateFormatter = dateFormatter;
+})();
diff --git a/public/javascripts/app/models/photo.js b/public/javascripts/app/models/photo.js
index 05b4a3c1e..cefbb0e1d 100644
--- a/public/javascripts/app/models/photo.js
+++ b/public/javascripts/app/models/photo.js
@@ -8,7 +8,7 @@ app.models.Photo = Backbone.Model.extend({
},
timeOf: function(field) {
- return new Date(this.get(field)) /1000;
+ return app.helpers.dateFormatter.parse(this.get(field)) / 1000;
},
-});
\ No newline at end of file
+});
diff --git a/public/javascripts/app/models/post.js b/public/javascripts/app/models/post.js
index c7ad731c6..a5beb5ecd 100644
--- a/public/javascripts/app/models/post.js
+++ b/public/javascripts/app/models/post.js
@@ -21,7 +21,7 @@ app.models.Post = Backbone.Model.extend({
},
timeOf: function(field) {
- return new Date(this.get(field)) /1000;
+ return app.helpers.dateFormatter.parse(this.get(field)) / 1000;
},
createReshareUrl : "/reshares",
diff --git a/spec/javascripts/app/app_spec.js b/spec/javascripts/app/app_spec.js
index 96884b650..f85054293 100644
--- a/spec/javascripts/app/app_spec.js
+++ b/spec/javascripts/app/app_spec.js
@@ -2,6 +2,7 @@ describe("app", function() {
describe("user", function() {
it("sets the user if given one and returns the current user", function() {
expect(app.user()).toBeFalsy()
+ });
it("sets the user if given one and returns the current user", function() {
expect(app.user().authenticated()).toBeFalsy()
diff --git a/spec/javascripts/app/helpers/date_formatter_spec.js b/spec/javascripts/app/helpers/date_formatter_spec.js
new file mode 100644
index 000000000..9d317a108
--- /dev/null
+++ b/spec/javascripts/app/helpers/date_formatter_spec.js
@@ -0,0 +1,33 @@
+describe("app.helpers.dateFormatter", function(){
+
+ beforeEach(function(){
+ this.statusMessage = factory.post();
+ this.formatter = app.helpers.dateFormatter;
+ })
+
+ describe("parse", function(){
+ context("modern web browsers", function(){
+ it ("supports ISO 8601 UTC dates", function(){
+ var timestamp = new Date(this.statusMessage.get("created_at")).getTime();
+ expect(this.formatter.parse(this.statusMessage.get("created_at"))).toEqual(timestamp);
+ })
+ })
+
+ context("legacy web browsers", function(){
+ it("supports ISO 8601 UTC dates", function(){
+ var timestamp = new Date(this.statusMessage.get("created_at")).getTime();
+
+ expect(this.formatter.parseISO8601UTC(this.statusMessage.get("created_at"))).toEqual(timestamp);
+ })
+ })
+
+ context("status messages", function(){
+ it("uses ISO 8601 UTC dates", function(){
+ var iso8601_utc_pattern = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(.(\d{3}))?Z$/;
+
+ expect(iso8601_utc_pattern.test(this.statusMessage.get("created_at"))).toBe(true);
+ })
+ })
+ })
+
+})