显然,作为消息块一部分创建的日期对象在通过套接字后会自动转换为字符串。即此代码:
$('form').submit(function() {
var now = new Date();
var msgObj = {
'now' : now,
'text' : "hello"
};
console.log(msgObj);
socket.emit('message', msgObj);
$('#m').val('');
return false;
});
socket.on('chat message', function(msgObj) {
console.log(msgObj);
var now = msgObj.now,
h = now.getHours(),
m = now.getMinutes();
console.log(h+':'+m);
});
将以下输出打印到控制台:
Object {now: Thu Jun 12 2014 20:49:35 GMT+0100 (BST), text: "hello"}
Object {now: "2014-06-12T19:49:35.258Z", text: "hello"}
所以date对象变成了两者之间的字符串。最后的控制台日志然后失败,因为字符串显然没有getHours()
方法。为什么这个值会改变?处理广播的代码不明显:
//...
socket.on('message', function(msgObj) {
io.emit('message', msgObj);
});
答案 0 :(得分:1)
试试这个......
socket.on('chat message', function(msgObj) {
console.log(msgObj);
var now = new Date(msgObj.now),
h = now.getHours(),
m = now.getMinutes();
console.log(h+':'+m);
});