将 JSON 日期时间转换为 JavaScript 日期时,它显示为比本地时区早 1 天
本文关键字:日期 时区 显示 时间 JSON 转换 JavaScript | 更新日期: 2023-09-27 18:35:54
我正在发出如下所示的 AJAX 请求:
$.ajax({
type: 'POST',
url: '@Url.Action("GetExpirationDates", "Products")',
data: data,
dataType: 'json',
success: function (data) {
var dateArray = data.map(function (date) {
var d = new Date(date);
return d.toLocaleDateString();
});
});
以下是data
的样子:
2016-02-25T00:00:00,2016-03-25T00:00:00,2016-04-25T00:00:00
似乎只要我这样做new Date(date)
这些日期中的每一个都有机会显示为
2/24/2016, 3/24/2016, 4/24/2016
(比应有的少一天)取决于当地时间。我知道这很可能是由于 JavaScript 处理时区的方式。我想知道如何修复它。
这取决于您希望如何使用最终结果。一个简单的例子是:
var d = new Date("2016-02-25T00:00:00");
d.getDate(); //returns 24 because my timezone is -06:00.
d.getUTCDate(); //returns 25, the UTC day of the month
对于getMonth/getUTCMonth也可以这样做。
我真的建议使用时刻。哪里像
moment("2016-02-25T00:00:00").format("MM/DD/YYYY"); //returns "02/25/2016"
它使您可以更好地控制 UTC 和格式化字符串。
试一试:
function getNow() {
var date = new Date(),
y = date.getFullYear(),
mo = date.getMonth() + 1,
d = date.getDate(),
h = date.getHours(),
m = date.getMinutes(),
s = date.getSeconds();
date.setDate(date.getDate());
mo = (mo < 10 ? '0' : '') + mo;
d = (d < 10 ? '0' : '') + d;
h = (h < 10 ? '0' : '') + h;
m = (m < 10 ? '0' : '') + m;
s = (s < 10 ? '0' : '') + s;
return h + ':' + m + ':' + s + ' - ' + mo + '/' + d + '/' + y;
}
如果在
使用ISO8601日期字符串时未指定 UTC 偏移量,浏览器将假定日期为 UTC。
将其表示为区域设置日期字符串将根据您的时区应用偏移量。
如果要获取 UTC 日期,可以使用
return d.toUTCString();
或者,如果您可以控制 JSON 服务,则可以在 ISO 字符串中指定日期所属的时区。
例如,UTC - 7 小时将表示为。
2016-02-25T00:00:00-0700,2016-03-25T00:00:00-0700,2016-04-25T00:00:00-0700
如果您的本地时区是 UTC - 7 小时,d.toLocaleString 将正确显示为
2/25/2016, 3/25/2016, 4/25/2016