获取日期字符串为前一天晚上11点的JavaScript

获取日期字符串为前一天晚上11点的JavaScript,javascript,datetime,Javascript,Datetime,我有以下输入字段: 在我的web应用程序中,我有- 字符串日期-2018年5月6日 这个JS代码: var d = "06/05/2018".split("/"); var date = new Date(d[2] + "-" + d[1] + "/" + d[0]).getTime(); console.log(date) 这将返回1525561200000,如果我把它放进 2018年5月5日星期六晚上11:00:00 然后,这会影响我的过滤系统-日期范围,因为如果我用输入字段选择最短日期为

我有以下输入字段: 在我的web应用程序中,我有-

字符串日期-2018年5月6日

这个JS代码:

var d = "06/05/2018".split("/");
var date = new Date(d[2] + "-" + d[1] + "/" + d[0]).getTime();
console.log(date)
这将返回
1525561200000
,如果我把它放进

2018年5月5日星期六晚上11:00:00

然后,这会影响我的过滤系统-日期范围,因为如果我用输入字段选择最短日期为2018年05月06日:

var d = $('#min').val()
var date = new Date(d).getTime();
console.log(date)

它将返回到2018年5月6日星期日上午12:00:00的
1525564800000

我该怎么做


谢谢

我可以写一篇完整的论文来说明用Javascript处理日期有多么困难和困难,以及如何避免陷阱和奇怪的错误,但最终你的具体问题归结为一个简单的打字错误。
手动解析并传递给
Date
构造函数的字符串如下所示:

2018-05/06

在连接字符串时,您错误地使用了
/
而不是
-
作为第二个分隔符。出于某种原因,浏览器随后将日期对象创建为2018-05-06午夜当地时间。以标准格式传递字符串时(从日期输入中获取字符串时会发生这种情况),即
2018-05-06
,日期对象将被创建为午夜2018-05-06UTC时间

因此,简而言之,可以通过将字符串连接中的
“/”
替换为
“-”
来解决问题,并且两个日期应该相同

但是,我应该指出,将字符串传递给
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
构造函数希望当有多个参数时,所有参数都是数字,并且会在内部将它转换为数字)

请确保您使用的时区是相同的。Epochconverter向您显示了两个时区,您混淆了月/日和日/月。请注意,输出不仅仅是第6行,而是5月6日。我认为您必须删除第二行中的“.getTime()”?!这是你想要的吗?@SerhatMERCAN给出了实际的ms.@Luca我认为这与时区有关,但在JS中是如何设置的?非常感谢:)使用你的技术,它现在也在不同的浏览器上工作!:D