Date 将javascript日期解析为elixir格式
我在JavaScript中使用Date 将javascript日期解析为elixir格式,date,datetime,elixir,Date,Datetime,Elixir,我在JavaScript中使用new Date()保存了一些日期,如下所示: “2019年2月24日星期日14:44:20 GMT+0200(东欧标准时间)” 我试图将这些解析为ElixirDateTime;我在“timex”中找不到任何有帮助的东西,我已经知道我可以使用DateTime.from_iso8601但是对于使用new Date().toISOString()保存的日期,我需要的是解析上面的字符串 提前感谢您可以使用elixir二进制模式匹配来提取日期部分,并使用Timex的RFC1
new Date()
保存了一些日期,如下所示:
“2019年2月24日星期日14:44:20 GMT+0200(东欧标准时间)”
我试图将这些解析为ElixirDateTime
;我在“timex”中找不到任何有帮助的东西,我已经知道我可以使用DateTime.from_iso8601
但是对于使用new Date().toISOString()保存的日期,我需要的是解析上面的字符串
提前感谢您可以使用elixir二进制模式匹配来提取日期部分,并使用Timex的RFC1123
格式进行解析。RFC1123的格式为,例如2013年3月5日星期二23:25:19+0200
。在iex中运行h Timex.Format.DateTime.Formatters.Default
,查看其他格式
iex> date_string = "Sun Feb 24 2019 14:44:20 GMT+0200 (Eastern European Standard Time)"
iex> <<day_name::binary-3,_,month_name::binary-3,_,day::binary-2,_,year::binary-4,_,time::binary-8,_::binary-4,offset::binary-5,_,rest::binary>> = date_string
iex> Timex.parse("#{day_name}, #{day} #{month_name} #{year} #{time} #{offset}", "{RFC1123}")
iex> {:ok, #DateTime<2019-02-24 14:44:20+02:00 +02 Etc/GMT-2>}
iex>date\u string=“2019年2月24日星期日14:44:20 GMT+0200(东欧标准时间)”
iex>=日期字符串
iex>Timex.parse(“{day}、{day}、{month}、{year}、{time}、{offset}、{RFC1123}”)
iex>{:好的,#日期时间}
模式匹配:
二进制大小以字节大小为单位。1字节==1个字符。比如说
3个字符day\u name
大小为3。下划线(\)用于模式匹配日期格式中的空格
为简单起见,更新了答案以使用二进制大小
而不是位字符串大小
我在“timex”里找不到任何有用的东西
假设您可以使用strftime
序列进行解析,例如%H:%M:%S
。这是一个列表,以及它们的匹配项
下面是一个格式字符串,我认为它应该适用于javascript日期:
def parse_js_date() do
Timex.parse!("Sun Feb 24 2019 14:44:20 GMT+0200 (Eastern European Standard Time)",
"%a %b %d %Y %H:%M:%S GMT%z (%Z)",
:strftime)
end
不幸的是,%Z
不希望与时区名称匹配,这会导致Timex.parse!()
来吐出一个错误。Elixir中的%Z
看起来只与一个单词匹配,例如时区缩写EET
。因此,我的简单、干净的解决方案被破坏了
您可以在解析日期字符串之前切掉时区名称:
def parse_js_date_string() do
[date_str|_tz_name] = String.split(
"Sun Feb 24 2019 14:44:20 GMT+0200 (Eastern European Standard Time)",
" (",
parts: 2
)
Timex.parse!(date_str,
"%a %b %d %Y %H:%M:%S GMT%z",
:strftime)
end
在iex中:
~/elixir_programs/my$ iex -S mix
Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]
Compiling 1 file (.ex)
Interactive Elixir (1.6.6) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> My.parse_js_date_string()
#DateTime<2019-02-24 14:44:20+02:00 +02 Etc/GMT-2>
iex(2)>
~/elixir\u程序/my$iex-S混合版
Erlang/OTP 20[erts-9.3][source][64位][smp:4:4][ds:4:4:10][async threads:10][hipe][kernel poll:false]
正在编译1个文件(.ex)
交互式长生不老药(1.6.6)-按Ctrl+C退出(键入h()回车以获取帮助)
iex(1)>My.parse_js_date_string()
#日期时间
iex(2)>