function mirrorDateProperties(target, source) {
				let prop;
				for (prop in source) {
					if (source.hasOwnProperty(prop)) {
						target[prop] = source[prop];
					}
				}

				// set special now implementation
				if (source.now) {
					target.now = function now() {
						return target.clock.now;
					};
				} else {
					delete target.now;
				}

				// set special toSource implementation
				if (source.toSource) {
					target.toSource = function toSource() {
						return source.toSource();
					};
				} else {
					delete target.toSource;
				}

				// set special toString implementation
				target.toString = function toString() {
					return source.toString();
				};

				target.prototype = source.prototype;
				target.parse = source.parse;
				target.UTC = source.UTC;
				target.prototype.toUTCString = source.prototype.toUTCString;
				target.isFake = true;

				return target;
			}
@param {Date} target
@param {Date} source
@returns {Date} the target after modifications