针对IE和Chrome的ToLocaleDateString()解决方法

问题描述:

我正在使用JS函数来声明该日期的下一个可用第一天的var日期。即今天将是11/01/2017(mm/dd/yyyy)。该功能是完美的工作,但IE 11 +不会采取它,而是抛出一些额外的功能,该表格然后会拒绝,因为不是一个有效的日期,但在Chrome中,它的工作完美。针对IE和Chrome的ToLocaleDateString()解决方法

伊夫改变了代码以下,这两个浏览器的工作原理..

//Calculate and assign next available 1st day of the month 
var date = new Date(); 
firstDay = new Date(date.getFullYear(), date.getMonth()+1, 1); 
firstDay = (new Date(firstDay).toLocaleString('en-US').replace(/[^ -~]/g,'')); 

但是输出为:11/1/2017,%2012:00:00%20AM..。这是功能上正确的,因为我的表单拾取"11/1/2017“的一部分,并忽略了其余部分,在IE浏览器& Chrome上,但是我怎么能改变上面的代码,所以它只会删除”,%2012:00:00%20AM“?它只是为了整理这是沿用户数据传递的URL

+0

我不明白你只是想显示11/1/2017?如果它假设被用作字符串,那么由于某种原因,您的变量firstDay必须是Date?你可以写firstDay = date.getDate()+'/'+(date.getMonth()+ 1)'/'+ date.getFullYear()。或者你想要别的东西? –

+0

或甚至可能是 firstDay =(new Date(firstDay).toLocaleString('en-US'))。Substring(0,10); –

Date.toLocaleString接受一个option参数允许声明你想如何输出。

你的情况,你会希望{day: 'numeric', month:'numeric', year:'numeric'}

var date = new Date(); 
 
firstDay = new Date(date.getFullYear(), date.getMonth() + 1, 1); 
 
firstDay = new Date(firstDay).toLocaleString('en-US', { 
 
     day: 'numeric', 
 
     month: 'numeric', 
 
     year: 'numeric' 
 
    }).replace(/[^ -~]/g,''); 
 
console.log(firstDay);
(这的确将是相同的 Date.toLocaleDateString不带选项)

+0

完美的工作,但IE浏览器不会采取它,即时获取屏幕上的输出:无效的GET数据,这是我与我的最后一个功能,= 11/1/2017 ..最初的问题..如果你复制粘贴那个日期,在'='之前是一个不可见的字符,我注意到,因为我总是必须在URL中回退两次,甚至在这个评论框中,是否可以将.replace添加到上面的代码片段中? – sanitizer

+0

@sanitizer当然,我把它加回来了,我不确定它做了什么,我没有手中的IE来体验这个问题。 – Kaiido

+2

告诉我关于它的事情.. IE是一种痛苦。此外,.replace的添加对问题进​​行了排序,并且上面的代码片段在Chrome和IE浏览器上都可以很好地工作!谢谢 – sanitizer

您可以使用toLocaleDateString,这会给你只是日期部分地区格式。

var d = new Date(); 
 

 
console.log(d.toLocaleDateString("en-US"));

您既可以使用

firstDay = date.getDate() + '/' + (date.getMonth() + 1) '/' + date.getFullYear(). 

或者

firstDay = new Date(firstDay).toLocaleString('en-US')