我有以下输入字段: 在我的网络应用程序中,我有 -
string date - 06/05/2018
这个JS代码:
var d = "06/05/2018".split("/");
var date = new Date(d[2] + "-" + d[1] + "/" + d[0]).getTime();
console.log(date)
这会返回1525561200000
,如果我把它放到epoch converter给我......
Saturday, May 5, 2018 11:00:00 PM
这会搞砸我的过滤系统 - 日期范围,因为如果我用输入字段选择最小日期06/05/2018
:
var d = $('#min').val()
var date = new Date(d).getTime();
console.log(date)
它返回1525564800000
来到Sunday, May 6, 2018 12:00:00 AM
我该如何解决这个问题?
由于
答案 0 :(得分:3)
我可以写一篇关于如何使用Javascript中的日期以及如何避免陷阱和奇怪错误的问题和困难的整篇论文,但最后你的具体问题归结为一个简单的错字。
您手动解析并传递给Date
构造函数的字符串如下所示:
2018-05/06
在连接字符串时,您错误地使用/
而不是-
作为第二个分隔符。出于某种原因,浏览器然后将日期对象创建为午夜2018-05-06 本地时间。以标准格式传递字符串时(从日期输入中获取时),即2018-05-06
,日期对象被创建为午夜2018-05-06 < strong> UTC时间。
因此,简而言之,您的问题可以通过在字符串连接中将"/"
替换为"-"
来解决,而且两个日期应该相同。
但是,我应该指出,将字符串传递给Date
构造函数是不可靠的,因为结果不是标准化的,并且浏览器之间可能不同(这也是为什么它表现得如此不可预测并且在这种情况下看似不合逻辑) 。由于规范规定了结果,因此最好传递数字。由于您已将日期字符串拆分为其组件,因此您已经到了一半。试试这个:
var date = new Date(
Number(d[2]),
Number(d[1]) - 1, // Subtracting 1 from month since it's base 0
Number(d[0])
).getTime();
(从技术上讲,我们甚至不需要显式转换为Number
,因为Date
构造函数在有多个参数时期望所有参数都是数字,并且会转换它得到的任何数据内部数字