diff --git a/lib/OpenLayers/Format/Filter/v1.js b/lib/OpenLayers/Format/Filter/v1.js index bd7cc32f09..bfc563c11a 100644 --- a/lib/OpenLayers/Format/Filter/v1.js +++ b/lib/OpenLayers/Format/Filter/v1.js @@ -6,6 +6,7 @@ * @requires OpenLayers/Format/Filter.js * @requires OpenLayers/Format/XML.js * @requires OpenLayers/Filter/Function.js + * @requires OpenLayers/BaseTypes/Date.js */ /** @@ -405,7 +406,9 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, { }); }, "Literal": function(value) { - // no ogc:expression handling for now + if (value instanceof Date) { + value = OpenLayers.Date.toISOString(value); + } return this.createElementNSPlus("ogc:Literal", { value: value }); diff --git a/tests/Format/Filter/v1.html b/tests/Format/Filter/v1.html index dc4eec2fc0..110895d81c 100644 --- a/tests/Format/Filter/v1.html +++ b/tests/Format/Filter/v1.html @@ -247,6 +247,30 @@ } + function test_date_writing(t) { + t.plan(1); + + // ISO 8601: 2010-11-27T18:19:15.123Z + var start = new Date(Date.UTC(2010, 10, 27, 18, 19, 15, 123)); + + // ISO 8601: 2011-12-27T18:19:15.123Z + var end = new Date(Date.UTC(2011, 11, 27, 18, 19, 15, 123)); + + var filter = new OpenLayers.Filter.Comparison({ + type: OpenLayers.Filter.Comparison.BETWEEN, + property: "when", + lowerBoundary: start, + upperBoundary: end + }); + + var format = new OpenLayers.Format.Filter.v1_0_0(); + + var got = format.write(filter); + var exp = readXML("BetweenDates"); + t.xml_eq(got, exp, "comparison filter with dates"); + } + + function readXML(id) { var xml = document.getElementById(id).firstChild.nodeValue; return new OpenLayers.Format.XML().read(xml).documentElement; @@ -288,6 +312,19 @@ --> +