假设您网站的用户输入了一个日期范围。
2009-1-1 to 2009-1-3
您需要将此日期发送到服务器进行某些处理,但服务器希望所有日期和时间都采用 UTC。
现在假设用户在阿拉斯加、夏威夷或斐济。由于它们位于与 UTC 完全不同的时区,因此需要将日期范围转换为如下所示的内容:
2009-1-1T8:00:00 to 2009-1-4T7:59:59
使用 JavaScript 日期对象,您如何将第一个“本地化”日期范围转换为服务器可以理解的内容?
假设您网站的用户输入了一个日期范围。
2009-1-1 to 2009-1-3
您需要将此日期发送到服务器进行某些处理,但服务器希望所有日期和时间都采用 UTC。
现在假设用户在阿拉斯加、夏威夷或斐济。由于它们位于与 UTC 完全不同的时区,因此需要将日期范围转换为如下所示的内容:
2009-1-1T8:00:00 to 2009-1-4T7:59:59
使用 JavaScript 日期对象,您如何将第一个“本地化”日期范围转换为服务器可以理解的内容?
简单而愚蠢
var date = new Date();
var now_utc = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),
date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
return new Date(now_utc);
该
toISOString()
方法以简化的扩展 ISO 格式 ( ISO 8601 )返回一个字符串,其长度始终为 24 或 27 个字符(分别为YYYY-MM-DDTHH:mm:ss.sssZ
或±YYYYYY-MM-DDTHH:mm:ss.sssZ
)。时区始终为零 UTC 偏移量,如后缀“Z
”所示。
来源: MDN 网络文档
您需要的格式是使用该.toISOString()
方法创建的。对于本机不支持此方法的旧浏览器(ie8 及以下),可以在此处找到垫片:
这将使您能够执行所需的操作:
var isoDateString = new Date().toISOString();
console.log(isoDateString);
对于时区工作,moment.js 和 moment.js 时区确实是非常宝贵的工具……尤其是用于在客户端和服务器 javascript 之间导航时区。
这是我的方法:
var now = new Date();
var utc = new Date(now.getTime() + now.getTimezoneOffset() * 60000);
结果utc
对象并不是真正的 UTC 日期,而是一个本地日期转移到匹配 UTC 时间(见评论)。然而,在实践中它可以完成工作。
在不更改日期/时间的情况下转换为 ISO
var now = new Date(); // Fri Feb 20 2015 19:29:31 GMT+0530 (India Standard Time)
var isoDate = new Date(now.getTime() - now.getTimezoneOffset() * 60000).toISOString();
//OUTPUT : 2015-02-20T19:29:31.238Z
转换为 ISO 更改日期/时间(日期/时间将更改)
isoDate = new Date(now).toISOString();
//OUTPUT : 2015-02-20T13:59:31.238Z
Date.prototype.toUTCArray= function(){
var D= this;
return [D.getUTCFullYear(), D.getUTCMonth(), D.getUTCDate(), D.getUTCHours(),
D.getUTCMinutes(), D.getUTCSeconds()];
}
Date.prototype.toISO= function(){
var tem, A= this.toUTCArray(), i= 0;
A[1]+= 1;
while(i++<7){
tem= A[i];
if(tem<10) A[i]= '0'+tem;
}
return A.splice(0, 3).join('-')+'T'+A.join(':');
}