3

我在我的网络应用程序中使用Date.js ,当我从 "Mon Oct 8 00:00:00 UTC-0300 2012" 中减去一天时,它返回的是 "oct 6" 而不是 "oct 7"

这是我的代码:

var startTime = new Date(2012, 9, 8);
var beforeStare = startTime.clone().addDays(-1);

在此处输入图像描述

为什么会这样?如何解决这个问题?

我也试过这个new Date(2012,9,7);它返回

2012 年 10 月 6 日 23:00:00 UTC-0300

注意:我正在使用 Asuncion(UTC-04:00)TimeZone

JSFiddler

4

2 回答 2

0

您将日期转换为 utc 进行计算并在向用户显示时转换为本地时区,这样您将确保您使用的所有日期都具有相同的标准。

// Creating the date "Oct 7 2012"
var date = new Date(2012, 9, 7);

//Convert to UTC in a safe way
var date_utc = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),  date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());

//Make the calculation in UTC format
var beforeStare_utc = date_utc.addDays(-1);

//Show to the user in his/her local time
var beforeStare = new Date(beforeStare_utc + " UTC");

​</p>

这是JSFiddle

于 2012-11-17T11:24:08.870 回答
0

JavaScript 日期确切地知道两个时区:本地时间和 UTC。您可以从第三个时区解析日期,但 JavaScript 会立即忘记该时区,只会以当地时间或 UTC 的形式告诉您该日期。

前一天Mon Oct 8 00:00:00 UTC-0300 2012Mon Oct 7 00:00:00 UTC-0300 2012。转换为您的本地时间 -0400,即Mon Oct 6 23:00:00 UTC-0400 2012.

更新了 jsFiddle

于 2013-08-06T22:51:59.603 回答