我有一些领域的模型。我想从 mongodb 获取字符串字段并获取子字符串。我正在尝试:我的 get_items 代码。重要的是只有一行带有过滤器。
get_items('GET', []) ->
Items = boss_db:find(item, []),
S = Req:query_param("start"),
F = Req:query_param("finish"),
Start = string_to_datetime(S),
Finish = string_to_datetime(F),
Fitems = filter(Items, Start, Finish, []),
{json, [{items, Fitems}]}.
create_item 代码。我的日期时间使用我自己的功能。
create_item('POST', []) ->
Lastname = Req:post_param("lastname"),
User = hd(boss_db:find(consumer, [{lastname, Lastname}])),
DateTime = datetime_to_string(calendar:now_to_local_time(erlang:now())),
Type = Req:post_param("type"),
IdType = Req:post_param("idtype"),
Item = item:new(id, User:id(), DateTime, Type, IdType),
case Item:save() of
{ok, SavedItem} -> {json, [{status, "ok"}]};
{error, Reason} -> {json, [{error, Reason}]}
end.
我将日期时间转换为字符串的功能。
datetime_to_string({{YY, MM, DD}, {Hour, Min, Sec}}) ->
io_lib:format("~4..0w-~2..0w-~2..0w ~2..0w:~2..0w:~2..0w",
[YY, MM, DD, Hour, Min, Sec]).
我将字符串转换为日期时间的函数。
string_to_datetime(S) ->
{YY, _} = string:to_integer(string:substr(S, 1, 4)),
{MM, _} = string:to_integer(string:substr(S, 6, 2)),
{DD, _} = string:to_integer(string:substr(S, 9, 2)),
{Hour, _} = string:to_integer(string:substr(S, 12, 2)),
{Min, _} = string:to_integer(string:substr(S, 15, 2)),
{Sec, _} = string:to_integer(string:substr(S, 18, 2)),
{{YY, MM, DD}, {Hour, Min, Sec}}.
我的过滤方法。
filter([], Start, Finish, Acc) -> Acc;
filter([Model|Models], Start, Finish, Acc) ->
DateTime = string_to_datetime(Model:datetime()),
{D1, _} = calendar:time_difference(Start, DateTime),
{D2, _} = calendar:time_difference(DateTime, Finish),
if
D1 >= 0, D2 >= 0 -> filter(Models, Start, Finish, [Model | Acc]);
true -> filter(Models, Start, Finish, Acc)
end.
我有错误:
{function_clause,
[{string,substr2,
[<<"2013-12-17 18:36:42">>,1],
[{file,"string.erl"},{line,213}]},
{string,substr,3,[{file,"string.erl"},{line,208}]},
{cb_tracker_main_controller,string_to_datetime,2,
请帮我。