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:00Z发布于 2017-08-03 13:09:56
如果您想要与浏览器中的完全相同,只需调用toString方法将其转换为字符串,如下所示。然后,你将得到正确的日期,如你所期望的。
(新日期()).toString();
发布于 2017-03-07 19:44:59
创建Date对象时(无论是在浏览器中还是在Node.js中),都会创建实例,将日期解释为当前时区的本地日期。见MDN文档中的第二个注意事项。
如果您想立即在UTC中创建日期,则必须使用
new Date(Date.UTC(...))Date.UTC()具有与new Date()相同的输入语义。
这里要注意的另一件事是,将日期实例打印到控制台将导致将日期表示为ISO时间戳,该时间戳总是以UTC格式表示。您可能希望通过打印date.toString()或date.toLocaleString()来检查date对象,后者将显示当前时区中的日期。
https://stackoverflow.com/questions/42631017
复制相似问题