summaryrefslogtreecommitdiff
path: root/jstests/aggregation/expressions/date_to_string.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/aggregation/expressions/date_to_string.js')
-rw-r--r--jstests/aggregation/expressions/date_to_string.js494
1 files changed, 243 insertions, 251 deletions
diff --git a/jstests/aggregation/expressions/date_to_string.js b/jstests/aggregation/expressions/date_to_string.js
index a1cbaa83fd9..b1cc145b627 100644
--- a/jstests/aggregation/expressions/date_to_string.js
+++ b/jstests/aggregation/expressions/date_to_string.js
@@ -1,294 +1,286 @@
load("jstests/aggregation/extras/utils.js"); // For assertErrorCode
(function() {
- "use strict";
+"use strict";
- const coll = db.date_to_string;
- coll.drop();
+const coll = db.date_to_string;
+coll.drop();
- /* --------------------------------------------------------------------------------------- */
+/* --------------------------------------------------------------------------------------- */
- assert.writeOK(coll.insert([
- {_id: 0, date: new ISODate("2017-07-04T14:56:42.911Z"), tz: "UTC"},
- {_id: 1, date: new ISODate("2017-07-04T14:56:42.911Z"), tz: "Europe/London"},
- {_id: 2, date: new ISODate("2017-07-04T14:56:42.911Z"), tz: "America/New_York"},
- {_id: 3, date: new ISODate("2017-07-04T14:56:42.911Z"), tz: "Australia/Eucla"},
- {_id: 4, date: new ISODate("2017-07-04T14:56:42.911Z"), tz: "Asia/Kathmandu"},
- {_id: 5, date: new ISODate("1935-07-10T11:36:37.133Z"), tz: "Europe/Amsterdam"},
- {_id: 6, date: new ISODate("1900-07-10T11:41:22.418Z"), tz: "America/Caracas"},
- ]));
+assert.writeOK(coll.insert([
+ {_id: 0, date: new ISODate("2017-07-04T14:56:42.911Z"), tz: "UTC"},
+ {_id: 1, date: new ISODate("2017-07-04T14:56:42.911Z"), tz: "Europe/London"},
+ {_id: 2, date: new ISODate("2017-07-04T14:56:42.911Z"), tz: "America/New_York"},
+ {_id: 3, date: new ISODate("2017-07-04T14:56:42.911Z"), tz: "Australia/Eucla"},
+ {_id: 4, date: new ISODate("2017-07-04T14:56:42.911Z"), tz: "Asia/Kathmandu"},
+ {_id: 5, date: new ISODate("1935-07-10T11:36:37.133Z"), tz: "Europe/Amsterdam"},
+ {_id: 6, date: new ISODate("1900-07-10T11:41:22.418Z"), tz: "America/Caracas"},
+]));
- assert.eq(
- [
- {_id: 0, date: "2017-07-04 14:56:42 +0000 (0 minutes)"},
- {_id: 1, date: "2017-07-04 15:56:42 +0100 (60 minutes)"},
- {_id: 2, date: "2017-07-04 10:56:42 -0400 (-240 minutes)"},
- {_id: 3, date: "2017-07-04 23:41:42 +0845 (525 minutes)"},
- {_id: 4, date: "2017-07-04 20:41:42 +0545 (345 minutes)"},
- {_id: 5, date: "1935-07-10 12:56:09 +0119 (79 minutes)"},
- {_id: 6, date: "1900-07-10 07:13:42 -0427 (-267 minutes)"},
- ],
- coll.aggregate([
- {
- $project: {
- date: {
- $dateToString: {
- format: "%Y-%m-%d %H:%M:%S %z (%Z minutes)",
- date: "$date",
- timezone: "$tz"
- }
- }
- }
- },
- {$sort: {_id: 1}}
- ])
- .toArray());
+assert.eq(
+ [
+ {_id: 0, date: "2017-07-04 14:56:42 +0000 (0 minutes)"},
+ {_id: 1, date: "2017-07-04 15:56:42 +0100 (60 minutes)"},
+ {_id: 2, date: "2017-07-04 10:56:42 -0400 (-240 minutes)"},
+ {_id: 3, date: "2017-07-04 23:41:42 +0845 (525 minutes)"},
+ {_id: 4, date: "2017-07-04 20:41:42 +0545 (345 minutes)"},
+ {_id: 5, date: "1935-07-10 12:56:09 +0119 (79 minutes)"},
+ {_id: 6, date: "1900-07-10 07:13:42 -0427 (-267 minutes)"},
+ ],
+ coll.aggregate([
+ {
+ $project: {
+ date: {
+ $dateToString: {
+ format: "%Y-%m-%d %H:%M:%S %z (%Z minutes)",
+ date: "$date",
+ timezone: "$tz"
+ }
+ }
+ }
+ },
+ {$sort: {_id: 1}}
+ ])
+ .toArray());
- /* --------------------------------------------------------------------------------------- */
- coll.drop();
+/* --------------------------------------------------------------------------------------- */
+coll.drop();
- assert.writeOK(coll.insert([
- {_id: 0, date: new ISODate("2017-01-04T15:08:51.911Z")},
- {_id: 1, date: new ISODate("2017-07-04T15:09:12.911Z")},
- {_id: 2, date: new ISODate("2017-12-04T15:09:14.911Z")},
- ]));
+assert.writeOK(coll.insert([
+ {_id: 0, date: new ISODate("2017-01-04T15:08:51.911Z")},
+ {_id: 1, date: new ISODate("2017-07-04T15:09:12.911Z")},
+ {_id: 2, date: new ISODate("2017-12-04T15:09:14.911Z")},
+]));
- assert.eq(
- [
- {_id: 0, date: "2017-01-04 10:08:51 -0500 (-300 minutes)"},
- {_id: 1, date: "2017-07-04 11:09:12 -0400 (-240 minutes)"},
- {_id: 2, date: "2017-12-04 10:09:14 -0500 (-300 minutes)"},
- ],
- coll.aggregate([
- {
- $project: {
- date: {
- $dateToString: {
- format: "%Y-%m-%d %H:%M:%S %z (%Z minutes)",
- date: "$date",
- timezone: "America/New_York"
- }
- }
- }
- },
- {$sort: {_id: 1}}
- ])
- .toArray());
+assert.eq(
+ [
+ {_id: 0, date: "2017-01-04 10:08:51 -0500 (-300 minutes)"},
+ {_id: 1, date: "2017-07-04 11:09:12 -0400 (-240 minutes)"},
+ {_id: 2, date: "2017-12-04 10:09:14 -0500 (-300 minutes)"},
+ ],
+ coll.aggregate([
+ {
+ $project: {
+ date: {
+ $dateToString: {
+ format: "%Y-%m-%d %H:%M:%S %z (%Z minutes)",
+ date: "$date",
+ timezone: "America/New_York"
+ }
+ }
+ }
+ },
+ {$sort: {_id: 1}}
+ ])
+ .toArray());
- /* --------------------------------------------------------------------------------------- */
- coll.drop();
+/* --------------------------------------------------------------------------------------- */
+coll.drop();
- assert.writeOK(coll.insert([
- {_id: 0, date: new ISODate("2017-01-04T15:08:51.911Z")},
- {_id: 1, date: new ISODate("2017-07-04T15:09:12.911Z")},
- {_id: 2, date: new ISODate("2017-12-04T15:09:14.911Z")},
- ]));
+assert.writeOK(coll.insert([
+ {_id: 0, date: new ISODate("2017-01-04T15:08:51.911Z")},
+ {_id: 1, date: new ISODate("2017-07-04T15:09:12.911Z")},
+ {_id: 2, date: new ISODate("2017-12-04T15:09:14.911Z")},
+]));
- assert.eq(
- [
- {_id: 0, date: "2017-01-04 15:08:51 +0000 (0 minutes)"},
- {_id: 1, date: "2017-07-04 15:09:12 +0000 (0 minutes)"},
- {_id: 2, date: "2017-12-04 15:09:14 +0000 (0 minutes)"},
- ],
- coll.aggregate([
- {
- $project: {
- date: {
- $dateToString:
- {format: "%Y-%m-%d %H:%M:%S %z (%Z minutes)", date: "$date"}
- }
- }
- },
- {$sort: {_id: 1}}
- ])
- .toArray());
+assert.eq(
+ [
+ {_id: 0, date: "2017-01-04 15:08:51 +0000 (0 minutes)"},
+ {_id: 1, date: "2017-07-04 15:09:12 +0000 (0 minutes)"},
+ {_id: 2, date: "2017-12-04 15:09:14 +0000 (0 minutes)"},
+ ],
+ coll.aggregate([
+ {
+ $project: {
+ date: {
+ $dateToString: {format: "%Y-%m-%d %H:%M:%S %z (%Z minutes)", date: "$date"}
+ }
+ }
+ },
+ {$sort: {_id: 1}}
+ ])
+ .toArray());
- /* --------------------------------------------------------------------------------------- */
- coll.drop();
+/* --------------------------------------------------------------------------------------- */
+coll.drop();
- assert.writeOK(coll.insert([
- {_id: 0, date: new ISODate("2017-01-01T15:08:51.911Z")},
- {_id: 1, date: new ISODate("2017-07-04T15:09:12.911Z")},
- {_id: 2, date: new ISODate("2017-12-04T15:09:14.911Z")},
- ]));
+assert.writeOK(coll.insert([
+ {_id: 0, date: new ISODate("2017-01-01T15:08:51.911Z")},
+ {_id: 1, date: new ISODate("2017-07-04T15:09:12.911Z")},
+ {_id: 2, date: new ISODate("2017-12-04T15:09:14.911Z")},
+]));
- assert.eq(
- [
- {_id: 0, date: "Natural: 2017-W1-01, ISO: 2016-W7-52"},
- {_id: 1, date: "Natural: 2017-W3-27, ISO: 2017-W2-27"},
- {_id: 2, date: "Natural: 2017-W2-49, ISO: 2017-W1-49"},
- ],
- coll.aggregate([
- {
- $project: {
- date: {
- $dateToString:
- {format: "Natural: %Y-W%w-%U, ISO: %G-W%u-%V", date: "$date"}
- }
- }
- },
- {$sort: {_id: 1}}
- ])
- .toArray());
+assert.eq(
+ [
+ {_id: 0, date: "Natural: 2017-W1-01, ISO: 2016-W7-52"},
+ {_id: 1, date: "Natural: 2017-W3-27, ISO: 2017-W2-27"},
+ {_id: 2, date: "Natural: 2017-W2-49, ISO: 2017-W1-49"},
+ ],
+ coll.aggregate([
+ {
+ $project: {
+ date: {
+ $dateToString: {format: "Natural: %Y-W%w-%U, ISO: %G-W%u-%V", date: "$date"}
+ }
+ }
+ },
+ {$sort: {_id: 1}}
+ ])
+ .toArray());
- /* --------------------------------------------------------------------------------------- */
- /* Test that missing expressions, turn into BSON null values */
- coll.drop();
+/* --------------------------------------------------------------------------------------- */
+/* Test that missing expressions, turn into BSON null values */
+coll.drop();
- assert.writeOK(coll.insert([
- {_id: 0, date: new ISODate("2017-01-04T15:08:51.911Z")},
- {_id: 1, date: new ISODate("2017-01-04T15:08:51.911Z"), timezone: null},
- {_id: 2, date: new ISODate("2017-01-04T15:08:51.911Z"), timezone: undefined},
- {_id: 3, timezone: "Europe/Oslo"},
- {_id: 4, date: null, timezone: "Europe/Oslo"},
- {_id: 5, date: undefined, timezone: "Europe/Oslo"},
- ]));
+assert.writeOK(coll.insert([
+ {_id: 0, date: new ISODate("2017-01-04T15:08:51.911Z")},
+ {_id: 1, date: new ISODate("2017-01-04T15:08:51.911Z"), timezone: null},
+ {_id: 2, date: new ISODate("2017-01-04T15:08:51.911Z"), timezone: undefined},
+ {_id: 3, timezone: "Europe/Oslo"},
+ {_id: 4, date: null, timezone: "Europe/Oslo"},
+ {_id: 5, date: undefined, timezone: "Europe/Oslo"},
+]));
- assert.eq(
- [
- {_id: 0, date: null},
- {_id: 1, date: null},
- {_id: 2, date: null},
- {_id: 3, date: null},
- {_id: 4, date: null},
- {_id: 5, date: null},
- ],
- coll.aggregate([
- {
- $project: {
- date: {
- $dateToString: {
- format: "%Y-%m-%d %H:%M:%S %z (%Z minutes)",
- date: "$date",
- timezone: "$timezone"
- }
- }
- }
- },
- {$sort: {_id: 1}}
- ])
- .toArray());
+assert.eq(
+ [
+ {_id: 0, date: null},
+ {_id: 1, date: null},
+ {_id: 2, date: null},
+ {_id: 3, date: null},
+ {_id: 4, date: null},
+ {_id: 5, date: null},
+ ],
+ coll.aggregate([
+ {
+ $project: {
+ date: {
+ $dateToString: {
+ format: "%Y-%m-%d %H:%M:%S %z (%Z minutes)",
+ date: "$date",
+ timezone: "$timezone"
+ }
+ }
+ }
+ },
+ {$sort: {_id: 1}}
+ ])
+ .toArray());
- /* --------------------------------------------------------------------------------------- */
- /* Test that the default format is "%Y-%m-%dT%H:%M:%S.%LZ" if none specified. */
- coll.drop();
+/* --------------------------------------------------------------------------------------- */
+/* Test that the default format is "%Y-%m-%dT%H:%M:%S.%LZ" if none specified. */
+coll.drop();
- assert.writeOK(coll.insert([
- {_id: 0, date: new ISODate("2017-01-04T15:08:51.911Z")},
- {_id: 1, date: new ISODate("2017-07-04T15:09:12.911Z")},
- {_id: 2, date: new ISODate("2017-12-04T15:09:14.911Z")},
- ]));
+assert.writeOK(coll.insert([
+ {_id: 0, date: new ISODate("2017-01-04T15:08:51.911Z")},
+ {_id: 1, date: new ISODate("2017-07-04T15:09:12.911Z")},
+ {_id: 2, date: new ISODate("2017-12-04T15:09:14.911Z")},
+]));
- assert.eq(
- [
- {_id: 0, date: "2017-01-04T10:08:51.911Z"},
- {_id: 1, date: "2017-07-04T11:09:12.911Z"},
- {_id: 2, date: "2017-12-04T10:09:14.911Z"},
- ],
- coll.aggregate([
- {$project: {date: {$dateToString: {date: "$date", timezone: "America/New_York"}}}},
- {$sort: {_id: 1}}
- ])
- .toArray());
+assert.eq(
+ [
+ {_id: 0, date: "2017-01-04T10:08:51.911Z"},
+ {_id: 1, date: "2017-07-04T11:09:12.911Z"},
+ {_id: 2, date: "2017-12-04T10:09:14.911Z"},
+ ],
+ coll.aggregate([
+ {$project: {date: {$dateToString: {date: "$date", timezone: "America/New_York"}}}},
+ {$sort: {_id: 1}}
+ ])
+ .toArray());
- /* --------------------------------------------------------------------------------------- */
- /* Test that null is returned when 'format' evaluates to nullish. */
- coll.drop();
- assert.writeOK(coll.insert({_id: 0}));
+/* --------------------------------------------------------------------------------------- */
+/* Test that null is returned when 'format' evaluates to nullish. */
+coll.drop();
+assert.writeOK(coll.insert({_id: 0}));
- assert.eq([{_id: 0, date: null}],
- coll.aggregate({
- $project: {
- date: {
- $dateToString: {
- date: new ISODate("2017-01-04T15:08:51.911Z"),
- format: null,
- }
+assert.eq([{_id: 0, date: null}],
+ coll.aggregate({
+ $project: {
+ date: {
+ $dateToString: {
+ date: new ISODate("2017-01-04T15:08:51.911Z"),
+ format: null,
}
}
- })
- .toArray());
- assert.eq([{_id: 0, date: null}],
- coll.aggregate({
- $project: {
- date: {
- $dateToString: {
- date: new ISODate("2017-01-04T15:08:51.911Z"),
- format: undefined,
- }
+ }
+ })
+ .toArray());
+assert.eq([{_id: 0, date: null}],
+ coll.aggregate({
+ $project: {
+ date: {
+ $dateToString: {
+ date: new ISODate("2017-01-04T15:08:51.911Z"),
+ format: undefined,
}
}
- })
- .toArray());
- assert.eq([{_id: 0, date: null}],
- coll.aggregate({
- $project: {
- date: {
- $dateToString: {
- date: new ISODate("2017-01-04T15:08:51.911Z"),
- format: "$missing",
- }
+ }
+ })
+ .toArray());
+assert.eq([{_id: 0, date: null}],
+ coll.aggregate({
+ $project: {
+ date: {
+ $dateToString: {
+ date: new ISODate("2017-01-04T15:08:51.911Z"),
+ format: "$missing",
}
}
- })
- .toArray());
+ }
+ })
+ .toArray());
- /* --------------------------------------------------------------------------------------- */
+/* --------------------------------------------------------------------------------------- */
- let pipeline = [{
- $project:
- {date: {$dateToString: {date: new ISODate("2017-01-04T15:08:51.911Z"), format: 5}}}
- }];
- assertErrCodeAndErrMsgContains(
- coll, pipeline, 18533, "$dateToString requires that 'format' be a string");
+let pipeline = [
+ {$project: {date: {$dateToString: {date: new ISODate("2017-01-04T15:08:51.911Z"), format: 5}}}}
+];
+assertErrCodeAndErrMsgContains(
+ coll, pipeline, 18533, "$dateToString requires that 'format' be a string");
- pipeline =
- [{$project: {date: {$dateToString: {format: "%Y-%m-%d %H:%M:%S", timezone: "$tz"}}}}];
- assertErrCodeAndErrMsgContains(
- coll, pipeline, 18628, "Missing 'date' parameter to $dateToString");
+pipeline = [{$project: {date: {$dateToString: {format: "%Y-%m-%d %H:%M:%S", timezone: "$tz"}}}}];
+assertErrCodeAndErrMsgContains(coll, pipeline, 18628, "Missing 'date' parameter to $dateToString");
- pipeline = [{
- $project: {
- date: {
- $dateToString: {
- date: new ISODate("2017-01-04T15:08:51.911Z"),
- format: "%Y-%m-%d %H:%M:%S",
- timezone: 5
- }
+pipeline = [{
+ $project: {
+ date: {
+ $dateToString: {
+ date: new ISODate("2017-01-04T15:08:51.911Z"),
+ format: "%Y-%m-%d %H:%M:%S",
+ timezone: 5
}
}
- }];
- assertErrCodeAndErrMsgContains(coll, pipeline, 40517, "timezone must evaluate to a string");
+ }
+}];
+assertErrCodeAndErrMsgContains(coll, pipeline, 40517, "timezone must evaluate to a string");
- pipeline = [{$project: {date: {$dateToString: {format: "%Y-%m-%d %H:%M:%S", date: 42}}}}];
- assertErrCodeAndErrMsgContains(
- coll, pipeline, 16006, "can't convert from BSON type double to Date");
+pipeline = [{$project: {date: {$dateToString: {format: "%Y-%m-%d %H:%M:%S", date: 42}}}}];
+assertErrCodeAndErrMsgContains(
+ coll, pipeline, 16006, "can't convert from BSON type double to Date");
- pipeline = [{
- $project: {
- date: {
- $dateToString: {
- date: new ISODate("2017-01-04T15:08:51.911Z"),
- format: "%Y-%m-%d %H:%M:%S",
- timezone: "DoesNotExist"
- }
+pipeline = [{
+ $project: {
+ date: {
+ $dateToString: {
+ date: new ISODate("2017-01-04T15:08:51.911Z"),
+ format: "%Y-%m-%d %H:%M:%S",
+ timezone: "DoesNotExist"
}
}
- }];
- assertErrCodeAndErrMsgContains(coll, pipeline, 40485, "unrecognized time zone identifier");
+ }
+}];
+assertErrCodeAndErrMsgContains(coll, pipeline, 40485, "unrecognized time zone identifier");
- pipeline = [{
- $project:
- {date: {$dateToString: {date: new ISODate("2017-01-04T15:08:51.911Z"), format: "%"}}}
- }];
- assertErrCodeAndErrMsgContains(coll, pipeline, 18535, "Unmatched '%' at end of format string");
+pipeline = [{
+ $project: {date: {$dateToString: {date: new ISODate("2017-01-04T15:08:51.911Z"), format: "%"}}}
+}];
+assertErrCodeAndErrMsgContains(coll, pipeline, 18535, "Unmatched '%' at end of format string");
- // Fails for unknown format specifier.
- pipeline = [{
- $project: {
- date: {$dateToString: {date: new ISODate("2017-01-04T15:08:51.911Z"), format: "%n"}}
- }
- }];
- assertErrCodeAndErrMsgContains(
- coll, pipeline, 18536, "Invalid format character '%n' in format string");
+// Fails for unknown format specifier.
+pipeline = [{
+ $project: {date: {$dateToString: {date: new ISODate("2017-01-04T15:08:51.911Z"), format: "%n"}}}
+}];
+assertErrCodeAndErrMsgContains(
+ coll, pipeline, 18536, "Invalid format character '%n' in format string");
})();