【发布时间】:2017-07-26 15:23:15
【问题描述】:
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 即 IST 时区。
在通过提供年月日创建日期的过程中,节点js将其视为IST并自动扣除-5:30。
Node 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
为什么上述代码在 Node 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.381Z
2017-03-08T17:58:16.000Z
浏览器输出:
2017 年 3 月 8 日星期三 17:58:17 GMT+0530(印度标准时间)
2017 年 3 月 8 日星期三 23:28:17 GMT+0530(印度标准时间)
Node js 行为和浏览器之间存在差异。 服务器(本地)时间是17:58。
new Date(?,?,?,?,?,?) 和 new Date(Date.UTC(?,?,?,?,?,?)) 有什么区别?
【问题讨论】:
-
如果你做
console.log(dateInCST);,你会得到什么?您收到的日期与您发送的日期相同吗? -
这取决于服务器时区,如果设置为 UTC,它将始终以 UTC 时区的日期和时间显示,同样浏览器的行为方式也相同(从操作系统获取时区)
-
@PavanKumarJorrigala 我在本地系统中运行它。我系统的时区是 IST,即 +5:30。我在问题中提供了更多细节。
-
你可能想看看
Date.UTC()。 -
不能单独使用
Date对象创建像dateInCST这样的变量。Date对象在内部始终为 UTC,并使用本地时区进行转换...您可以使用 moment.js 执行此操作,但不能使用原始Date。
标签: javascript node.js date iso8601