var dateInCST; //Getting CST date as input.
/*Triming the time part and retaining only the date.*/
var onlyDateInCST = new Date(dateInCST.getUTCFullYear(), dateInCST.getUTCMonth(), dateInCST.getUTCDate());
console.log(onlyDateInCST);我在+5点30分。
在日期创建期间,通过提供年份、月份和日期,节点js将其视为IST,并自动推断-5:30。
节点js通过考虑该日期位于服务器时区,将日期自动转换为UTC。但在浏览器中,我没有时间得到适当的CST日期。
例子:
var today = new Date(2017, 2, 7);
console.log(today);日期为2017-03-07T00:00:00.000Z。但节点js从该日期起扣除UTC ( +5:30 )与日期对象之间的服务器时差,日期对象为2017-03-06T18:30:00.000Z。
为什么上述代码在节点js中的行为与浏览器不同。有什么解决办法吗?
编辑:
var date = new Date();
function createDateAsUTC(date) {
return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
}
console.log(date);
console.log(createDateAsUTC(date));NodeJs输出:
2017-03-08T12:28:16.381 Z
2017-03-08T17:58:16.000Z
浏览器输出:
2017年3月8日星期三17:58:17 GMT+0530 (印度标准时间)
2017年3月8日星期三23:28:17 GMT+0530 (印度标准时间)
节点js行为与浏览器之间存在差异。服务器(本地)时间是17:58。
新的日期( ?,?)有什么区别?和新的日期(Date.UTC( ?,?))?
发布于 2017-03-07 19:33:47
Nodejs以ISO 8601格式表示。
Z是零UTC偏移量的区域指示符。因此,"09:30世界协调时“被表示为"09:30Z”或“0930 Z”。
在你的情况下
var var=新日期(2017,2,7);
2017-03-06T18:30:00.000Z是有效的,因为它是以UTC表示的。
nodejs中的默认日期格式可能是yyyy-mm-ddThh:mm:ss.fffZ,如果将其更改为yyyy-mm-ddThh:mm:ss.fffZ+|-hh:mm,它将显示为2017-03-07T00:00:00.000+05:30
更新
我运行了与您相同的日期和时区,在我的机器上它没有显示ISO 8601格式,它只使用toISOString()方法显示。
var today = new Date(2017, 2, 7);
console.log(today); --> Tue Mar 07 2017 00:00:00 GMT+0530 (India Standard Time)
console.log(today.toISOString()); --> 2017-03-06T18:30:00.000Z为了复制,我添加了moment.js
var today = new Date(2017, 2, 7);
console.log(moment(today).format()); --------> 2017-03-07T00:00:00+05:30
console.log(moment(today).utc().format()); --> 2017-03-06T18:30:00Zhttps://stackoverflow.com/questions/42631017
复制相似问题