JS:将字符串转换为日期的错误
Posted
技术标签:
【中文标题】JS:将字符串转换为日期的错误【英文标题】:JS: Bug converting string to Date 【发布时间】:2013-06-28 11:06:26 【问题描述】:我正在将数据对象转换为 JSON 并返回 JSON.stringify
和 JSON.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.stringify
在Date
类型的变量上生成的
【参考方案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:将字符串转换为日期的错误的主要内容,如果未能解决你的问题,请参考以下文章