首先,抛出一个问题:
- 用 AJAX 向后台发生请求的时候,其中的一个参数为
new Date()
,问是否能成功发送请求?
<script>
// 设置超时时间
setTimeout(function () {
var tradeDate = new Date();
$.ajax({
url: "${path}/app/trade/queryTradeCount",
type: "POST",
data: {
tradeDate: tradeDate
},
dataType: "JSON",
async: "true",
success: function (data) {
alert("请求成功");
},
error: function (data) {
alert("请求失败");
}
});
}, 80);
</script>
示例代码如上所示,其结果就是:请求失败。至于原因嘛,tradeDate
是object
类型,而在 AJAX 中,object
类型是不能直接与后台进行交互的,需要将其转换为string
类型。在 JS 中,将new Date()
转换为string
类型的方法很多,但如果我们要求时间格式为dd/MM/yyyy
呢?这时,有的同学可能就想到toLocaleDateString()
方法啦!不可否认,toLocaleDateString()
方法确实有可能将时间类型转换为dd/MM/yyyy
格式,有图为证:
但实际上,toLocaleDateString()
方法的真正含义为「根据本地时间把Date
对象的日期部分转换为字符串」,这意味着:在不同的浏览器或者服务器中,我们可能得到不同的字符串。例如,将 Chrome 浏览器的版本从57
升级为58
再升级为69
,通过toLocaleDateString()
方法获取的时间字符串格式分别为:
#Chrome = 57
> new Date().toLocaleDateString()
> output: "2018/9/28"
#Chrome = 58
> new Date().toLocaleDateString()
> output: "2018-9-28"
#Chrome = 69
> new Date().toLocaleDateString()
> output: "9/28/2018"
如果我们使用69
版本的 Chrome 浏览器又想获取yyyyMMdd
格式的字符串,很有可能通过如下代码来实现:
var tradeDate = (new Date()).toLocaleDateString().split('/');
var year = tradeDate[2];
var month = tradeDate[0];
var day = tradeDate[1];
var yyyyMMdd = year + '-' + month + '-' + day;
这样的话,在不同的浏览器或者服务器中,其表现的效果估计会让我们欲仙欲死啦!因此,要慎用toLocaleDateString()
方法或者根本就不用toLocaleDateString()
方法。如果我们想获取yyyyMMdd
格式的字符串,有一种很简单的方法,即:
var tradeDate = new Date();
var yyyyMMdd = tradeDate.getFullYear() + "-"
+ (tradeDate.getMonth() + 1) + "-" + tradeDate.getDate();
其中,getMonth()
之所以要+1
,是因为 JS 中getMonth()
方法获取的值为0 ~ 11
,分别对应我们的 1 月至 12 月,因此要想转换为我们熟悉的1 ~ 12
,这就是需要我们稍微变通一下啦!至此,分享完毕。