JS:将字符串转换为日期的错误

Posted

技术标签:

【中文标题】JS:将字符串转换为日期的错误【英文标题】:JS: Bug converting string to Date 【发布时间】:2013-06-28 11:06:26 【问题描述】:

我正在将数据对象转换为 JSON 并返回 JSON.stringifyJSON.parse

这在所有设备上都非常有效,但在 Samsung Galaxy SII 上,线路:

console.log(jsonObj.gebDat+"::"+new Date(jsonObj.gebDat));

我得到了输出:

1973-07-01T10:49:25.134Z::无效日期

我正在像this answer 一样实现这个,它适用于大多数设备,我做错了什么吗??

更新

澄清问题。我创建了一个字符串调用

var stringToSave = JSON.stringify(gebDat: dataclass.gebDat, <here are some more variables>);

然后我保存它。稍后,我加载字符串并用

解析它
var jsonObj = JSON.parse(stringToSave);

然后,我尝试再次设置我的日期(在该行之前调用日志)

console.log(jsonObj.gebDat+"::"+new Date(jsonObj.gebDat));
this.gebDat = new Date(jsonObj.gebDat);

如上所示,日志给了我无效的日期,当我表示日期时,它显示NaN.NaN.NaN 而不是预期的01.07.1973

【问题讨论】:

您的 Galaxy SII 与其他设备的 android 版本是否相同? @Bigood 不,Galaxy SII 的 Android 版本为 2.3.3。 你们处理不同时区的日期吗?其他明智的尝试构造函数格式new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]]) 什么是jsonObj.gebDat?一个字符串?日期对象? @Xotic750 jsonObj.gebDat 在这种情况下是一个包​​含“1973-07-01T10:49:25.134Z”的字符串。该字符串是使用JSON.stringifyDate 类型的变量上生成的 【参考方案1】:

1.日期字符串格式取决于实现。始终建议您在保存日期时使用时间戳

var timestamp = Date.parse( new Date() );//1372675910000

现在您可以使用保存的时间戳稍后重新创建日期

var date = new Date(1372675910000);//Mon Jul 01 2013 16:21:50 GMT+0530 (India Standard Time)

2.如果您不处理不同的时区,可以从当前解决方案进行简单过渡,

var dateString = jsonObj.getDat.substring(0,23);
var datePart = dateString.split('T')[0].split('-');
var timePart = dateString.split('T')[1].split(/[:.]/);
var DateOj = new Date(datePart[0], datePart[1], datePart[2], timePart[0], timePart[1], timePart[2]);

让我澄清 1,参考您的更新。

var stringToSave = JSON.stringify(gebDat: Date.parse(dataclass.gebDat), <here are some more variables>);

var jsonObj = JSON.parse(stringToSave);

console.log('timestamp :' + jsonObj.gebDat);//1372680083000
console.log(new Date(jsonObj.gebDat));//Mon Jul 01 2013 17:31:23 GMT+0530 (India Standard Time)

【讨论】:

Date.parse() 使用字符串作为参数。我认为将它与 Date 参数一起使用并不是一个好主意。 建议将jsonObj.getDat 存储为时间戳。然后在日期构造函数中使用该时间戳。 使用JSON.stringify 会自动调用方法toJSON()。因为它使用 ISO-8601 标准,所以它应该和时间戳一样好。 它适用于时间戳。我猜这是因为 Android 2.3.3 中 Date 的构造器中的一个错误,后来被纠正了...... 是的,他们可能错过了 rfc 和 iso 建议。【参考方案2】:

您需要发送字符串并发送回调。

尝试:

console.log(jsonObj.gebDat+"::"+new Date(jsonObj.gebDat()));

【讨论】:

以上是关于JS:将字符串转换为日期的错误的主要内容,如果未能解决你的问题,请参考以下文章

将字符串转换为 NSDate 给出错误的日期

如何用JS判断某个字符串可以转换成日期?

怎么将YYYYMMDD字符串格式转换为日期YYYY-MM-DD

JS中日期型与长整型是如何转换的

Momentjs:将 12 小时转换为日期对象

将字符串转换为日期时间错误 [重复]