Javascript 转换格式为';2019年3月12日上午9:30'+;给定浏览器时区的偏移量,而不使用任何库
我得到了一个这种格式的日期字符串——“2019年3月12日11:30 pm”,还有以小时为单位的偏移量,如+5.5。我想将此日期转换为我的浏览器时区 我尝试了以下代码Javascript 转换格式为';2019年3月12日上午9:30'+;给定浏览器时区的偏移量,而不使用任何库,javascript,timezone-offset,Javascript,Timezone Offset,我得到了一个这种格式的日期字符串——“2019年3月12日11:30 pm”,还有以小时为单位的偏移量,如+5.5。我想将此日期转换为我的浏览器时区 我尝试了以下代码 function convertToLocalTime(date, offset) { const serverTime = new Date(date); const localOffset = offset * 3600000; const d = new Date(serverTime.getTime() + l
function convertToLocalTime(date, offset) {
const serverTime = new Date(date);
const localOffset = offset * 3600000;
const d = new Date(serverTime.getTime() + localOffset).toUTCString();
return new Date(d);
}
但是我得到的日期是2019年3月12日星期二15:30:00 GMT+0530(印度标准时间),这是错误的
预期结果应该是,如果日期是2019年3月12日晚上11:30,给出的偏移量是-8,并且我的本地时间偏移量为+5.5,那么我应该得到日期为2019年3月13日下午12:00
convertToLocalTime('2019年3月12日晚上11:30',-8)
日期应为2019年3月13日下午12:00。可能是这样的:
函数转换器本地时间(日期、偏移量){
var options={year:'numeric',month:'long',day:'numeric',hour:'numeric',minute:'numeric'};
var serverdate=新日期(日期);
var ISTOffset=330;
var tzDifference=offset*60+(ISTOffset+serverdate.getTimezoneOffset());
var offsetTime=新日期(serverdate.getTime()+tzDifference*60000);
返回offsetTime.toLocaleDateString(“en-US”,选项);
}
控制台日志(convertToLocalTime('2019年3月12日晚上11:30',-8.00))代码>可能是这样的:
函数转换器本地时间(日期、偏移量){
var options={year:'numeric',month:'long',day:'numeric',hour:'numeric',minute:'numeric'};
var serverdate=新日期(日期);
var ISTOffset=330;
var tzDifference=offset*60+(ISTOffset+serverdate.getTimezoneOffset());
var offsetTime=新日期(serverdate.getTime()+tzDifference*60000);
返回offsetTime.toLocaleDateString(“en-US”,选项);
}
控制台日志(convertToLocalTime('2019年3月12日晚上11:30',-8.00))代码>
您应该反转偏移符号(从负到正,反之亦然)
在此基础上,添加当前时区偏移量
(-n)
反转数字符号n
- 将以分钟为单位返回与UTC的时区差,因此您可以
/60
以小时为单位将其转换为相同的单位
- 您还可以反转时区偏移的符号(以小时为单位)
函数转换器本地时间(日期、偏移量){
const serverTime=新日期(日期);
常量localOffset=(-offset)+((serverTime.getTimezoneOffset()/60))*3600000;
const d=新日期(serverTime.getTime()+localOffset.toutString();
返回新日期(d);
}
设dt=convertToLocalTime('2019年3月12日晚上11:30',-8);
控制台日志(dt);
log(dt.toString())代码>
您应该反转偏移符号(从负到正,反之亦然)
在此基础上,添加当前时区偏移量
(-n)
反转数字符号n
- 将以分钟为单位返回与UTC的时区差,因此您可以
/60
以小时为单位将其转换为相同的单位
- 您还可以反转时区偏移的符号(以小时为单位)
函数转换器本地时间(日期、偏移量){
const serverTime=新日期(日期);
常量localOffset=(-offset)+((serverTime.getTimezoneOffset()/60))*3600000;
const d=新日期(serverTime.getTime()+localOffset.toutString();
返回新日期(d);
}
设dt=convertToLocalTime('2019年3月12日晚上11:30',-8);
控制台日志(dt);
log(dt.toString())谢谢你帮我。我在IST(5.5将是偏移量)。因此,“2019年3月12日11:30下午”、-8.00应显示为2019年3月13日12:00下午。但我得到的时间是2019年3月12日10:00,我不完全理解你想要什么,但也许我的编辑可以帮你多一点。问候我很抱歉没有说清楚。它希望将2019年3月12日太平洋标准时间晚上11:30转换为我的当地时间。为此,如果我使用如下函数convertToLocalTime('2019年3月12日11:30 pm',-8.00)
。我得到的输出是2019年3月12日下午3:30,这不是正确的日期。应该是2019年3月13日下午12:00。我用你的更新代码试过了。谢谢你帮我。我在IST(5.5将是偏移量)。因此,“2019年3月12日11:30下午”、-8.00应显示为2019年3月13日12:00下午。但我得到的时间是2019年3月12日10:00,我不完全理解你想要什么,但也许我的编辑可以帮你多一点。问候我很抱歉没有说清楚。它希望将2019年3月12日太平洋标准时间晚上11:30转换为我的当地时间。为此,如果我使用如下函数convertToLocalTime('2019年3月12日11:30 pm',-8.00)
。我得到的输出是2019年3月12日下午3:30,这不是正确的日期。应该是2019年3月13日下午12:00。我用你的更新代码试过了。说“不使用任何库”,你是在要求1)一个依赖于实现的答案(可能因浏览器、平台等而异),或者2)让我们为你编写类似库的代码。基本上,在解析新日期(“2019-03-12T23:30:00+05:30”)
之前,您需要将输入值转换为单个字符串,因为这是ECMAScript规范所要求的唯一格式。我相信我可以编写这样的代码来操作字符串,但为什么不使用已经测试并广泛使用的库呢?有很多可供选择,因此我的应用程序有一个大小限制。因此,添加矩库将使应用程序大小增加100kb。所以我不能使用这样的库。日期函数接受输入格式为“我正在传递”。当涉及时区转换时,我得到了错误的日期标准实际上不接受它,您只是发现特定的实现并没有拒绝它。你没有任何保证。另外,您是否尝试过其他库,如Luxon或Date fns?它们都比现在小得多