JSON.stringify转换JSON时日期时间不准确的解决方法

博客讨论了在使用JSON.stringify存储日期时遇到的时间减少1的问题,指出问题根源不在于sessionStorage,而是JSON.stringify的过程。提供了一个名为yymmdd的函数,用于将日期转换为字符串格式,从而避免转换过程中时间信息丢失。该方法适用于需要在存储前正确格式化时间的数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sessionStorage.setItem("taskConfigs",JSON.stringify(temp))

发现存入sessionStorage中的时间 出现减1的显现 本以为是sessionStorage的存储问题  后来发现是JSON.stringify的问题   

可以将时间转换成字符串,这样存进去再取出来就没问题了

附上年月日的转换方式

export function yymmdd (time) {

    let date;

    if (isNull(time)) {

        date = new Date();

    } else {

        date = new Date(time);

    }

    const year = date.getFullYear();

    const month = (date.getMonth() + 1).toString().padStart(2, '0');

    const day = (date.getDate()).toString().padStart(2, '0');

    return (`${year}-${month}-${day}`);

}

### 解决 `JSON.stringify` 转换产生的斜杠问题 当使用 `JSON.stringify()` 方法将 JavaScript 对象转换JSON 字符串,某些特殊字符会被转义,其中包括反斜杠 `\`。这种行为是为了确保生成的字符串符合 JSON 标准并能被正确解析。 对于希望避免或处理 `.stringify` 转换过程中出现的额外斜杠的情况,可以通过以下几种方式来实现: #### 使用正则表达式替换 一种常见的解决方案是在调用 `JSON.stringify()` 后立即通过正则表达式去除需要的反斜杠: ```javascript let jsonString = JSON.stringify(vm.goods); // 移除所有的反斜杠 jsonString = jsonString.replace(/\\/g, ''); ``` 这种方法简单直接,适用于大多数场景[^2]。 #### 自定义 replacer 函数 另一种更为灵活的方法是利用 `JSON.stringify()` 提供的第二个参数——replacer 函数,在序列化的过程中控制哪些属性应该被包含以及如何表示这些属性。过需要注意的是,这种方式主要用于过滤或修改特定键值对的内容,并直接影响到整个字符串中的反斜杠处理。 #### 设置 Content-Type 头部信息 如果问题是由于 HTTP 请求导致的服务端误解,则可以在发送 AJAX 或 Fetch 请求之前设置合适的 `Content-Type` 头部信息为 `application/json; charset=utf-8`,从而让服务端知道接收到的数据是一个完整的 JSON 文本而是需要进一步解码的形式。 #### 修改服务器配置 有,客户端并没有做错什么,而是因为服务器端默认会对传入的 JSON 数据进行了二次编码所致。此应当检查服务器侧的相关设置,比如 PHP 中可能存在的 `magic_quotes_gpc` 配置项(尽管现代版本已经废弃),或者其他可能导致双重转义的安全机制。 ```javascript fetch('/api/endpoint', { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify(data) }) .then(response => response.json()) .catch(error => console.error('Error:', error)); ``` 以上方法可以帮助减少甚至完全消除必要的反斜杠,具体选择哪种取决于实际应用场景和个人偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值