关于 toLocaleDateString 方法的实践分享

首先,抛出一个问题:

  • 用 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>

示例代码如上所示,其结果就是:请求失败。至于原因嘛,tradeDateobject类型,而在 AJAX 中,object类型是不能直接与后台进行交互的,需要将其转换为string类型。在 JS 中,将new Date()转换为string类型的方法很多,但如果我们要求时间格式为dd/MM/yyyy呢?这时,有的同学可能就想到toLocaleDateString()方法啦!不可否认,toLocaleDateString()方法确实有可能将时间类型转换为dd/MM/yyyy格式,有图为证:

chrome-toLocaleDateString

但实际上,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,这就是需要我们稍微变通一下啦!至此,分享完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安正勋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值