**`timeSlots() ` is not working with DateTime64 date type at all, even when within normal range:**
```sql
SELECT timeSlots(toDateTime64('2012-01-01 12:20:00', 0, 'UTC'), 600)

Received exception from server (version 22.1.3):
Code: 43. DB::Exception: Received from localhost:9000. DB::Exception: Illegal type DateTime64(0, 'UTC') of first argument of function timeSlots. Must be DateTime.: While processing timeSlots(toDateTime64('2012-01-01 12:20:00', 0, 'UTC'), 600). (ILLEGAL_TYPE_OF_ARGUMENT)
```
String getName() const override
    {
        return name;
    }
    bool isVariadic() const override { return true; }
    bool isSuitableForShortCircuitArgumentsExecution(const DataTypesWithConstInfo & ) const override { return true; }
    size_t getNumberOfArguments() const override { return 0; }
    bool useDefaultImplementationForConstants() const override { return true; }
    ColumnNumbers getArgumentsThatAreAlwaysConstant() const override { return {2}; }
    DataTypePtr getReturnTypeImpl(const ColumnsWithTypeAndName & arguments) const override
    {
        if (arguments.size() != 2 && arguments.size() != 3)
            throw Exception("Number of arguments for function " + getName() + " doesn't match: passed "
                            + toString(arguments.size()) + ", should be 2 or 3",
                            ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
        if (!WhichDataType(arguments[0].type).isDateTime())
            throw Exception("Illegal type " + arguments[0].type->getName() + " of first argument of function " + getName() + ". Must be DateTime.",
                ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT);
        if (!WhichDataType(arguments[1].type).isUInt32())
            throw Exception("Illegal type " + arguments[1].type->getName() + " of second argument of function " + getName() + ". Must be UInt32.",
                ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT);
        if (arguments.size() == 3 && !WhichDataType(arguments[2].type).isNativeUInt())
            throw Exception("Illegal type " + arguments[2].type->getName() + " of third argument of function " + getName() + ". Must be UInt32.",
                ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT);
        
        
        return std::make_shared<DataTypeArray>(std::make_shared<DataTypeDateTime>(extractTimeZoneNameFromFunctionArguments(arguments, 3, 0)));
    }
    ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t) const override