Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript UTC实时时钟,不使用负时区_Javascript_Html_Datetime - Fatal编程技术网

Javascript UTC实时时钟,不使用负时区

Javascript UTC实时时钟,不使用负时区,javascript,html,datetime,Javascript,Html,Datetime,在我的应用程序中,我需要根据存储到数据库中的不同时区创建实时时钟 我几乎成功了 但现在我正面临着时间的负面影响,我没有办法想出一个解决办法 我在new Date()的帮助下获得UTC时间,并使用数据库提供的时区计算时间 案例1:0:31(UTC时间)+5:30(时区)='06:01' 案例2:06:31(UTC时间)-6:30(时区)='00:01' 案例3:5:0(UTC时间)-7:0(时区)='-02:00' 案例1和案例2工作正常,但第三个案例中的值为负值,这是错误的 我试图在代码中添加注

在我的应用程序中,我需要根据存储到数据库中的不同时区创建实时时钟

我几乎成功了

但现在我正面临着时间的负面影响,我没有办法想出一个解决办法

我在
new Date()
的帮助下获得UTC时间,并使用数据库提供的时区计算时间

案例1:
0:31(UTC时间)+5:30(时区)='06:01'

案例2:
06:31(UTC时间)-6:30(时区)='00:01'

案例3:
5:0(UTC时间)-7:0(时区)='-02:00'

案例1和案例2工作正常,但第三个案例中的值为负值,这是错误的

我试图在代码中添加注释,以便更好地理解我在这里所做的事情。我希望有帮助

我们将非常感谢您的帮助

函数runClock(){
setInterval(函数(){
//调试器
变量时间=新日期();
//从HTML元素获取时区
//ex:+:5:30
var getTimezone=“-:7:0”//$(“#时区”).text();
//拆分为数组以获取运算器(正时区和负时区)
var opator=getTimezone.split(“:”[0];
var timezone=getTimezone.split(“:”[1]+“:”+getTimezone.split(“:”[2];
//获取UTC小时数
var hours=5//time.getUTCHours();
var minutes=0//time.getUTCMinutes();
var UTCTIME=时间字符串长度(小时+“:”+分钟);
var TIMEZONEOFFSETTIME=timeStringToFloat(时区);
var finalTime=“”;
//将冒号后面的时间转换为小数
//例:1:45=1.75
函数timeStringToFloat(时间){
var hoursMinutes=time.split(/[.:]/);
var hh=parseInt(小时分钟[0],10);
var mm=hoursMinutes[1]?parseInt(hoursMinutes[1],10):0;
返回hh+mm/60;
}
//将浮点后面的时间转换为冒号
//例:1.75=1:45
函数floatToTime(英尺){
var splittedTime=FT.toString().split(“.”);
var hh=分割时间[0];
var mm=“”;
如果(拆分时间[1]){
mm=数学圆((分割时间[1]/100)*60);
}否则{
mm=“0”;
}
最终时间=hh+“:”+((毫米<10)?(“0”+毫米):毫米);
}
//计算时间(UTC+或-时区)
//例如:00:15(UTC)+5:30=5:45
函数计算时间(UTCTIME、时区偏移设置时间){
如果(运算器==“+”){
var FT=UTCTIME+时区偏移设置时间;
FT=FT.toFixed(2);
浮动时间(FT);
}否则{
var FT=UTCTIME-时区偏移设置时间;
FT=FT.toFixed(2);
浮动时间(FT);
}
}
//解析秒数
函数秒(){
var j=“”;
if(time.getUTCSeconds()<10){
j=“0”+time.getUTCSeconds();
}否则{
j=time.getUTCSeconds()
}
返回j;
}
计算时间(UTCTIME、时区偏移设置时间);
$(“#时钟时间”).text(finalTime+”:“+seconds());
}, 1000);
}
运行时钟()

如果您不想使用带有时区处理的moment.js之类的库,只需要从给定日期中添加/减去小时,那么将它们转换为公共时间单位并在该时间单位上运行如何

const timezoneString = '-:12:30';
const parts = timezoneString.split(':');
const timezone = (parts[0] === '-' ? -1 : 1) * (parseInt(parts[1]) + (parseInt(parts[2]) / 60.0));
const timeZoneMillis = timezone * 3600 * 1000;
const now = new Date();
const inZone = new Date(now.getTime() + timeZoneMillis);
console.log(now, inZone);

类似这样的东西会将它们转换为毫秒时间戳,减去那么多小时,然后将其转换回日期。

如果您不想使用带有时区处理的moment.js之类的库,只需要从给定日期中添加/减去小时,把它们转换成一个通用的时间单位,并以此为基础进行操作,怎么样

const timezoneString = '-:12:30';
const parts = timezoneString.split(':');
const timezone = (parts[0] === '-' ? -1 : 1) * (parseInt(parts[1]) + (parseInt(parts[2]) / 60.0));
const timeZoneMillis = timezone * 3600 * 1000;
const now = new Date();
const inZone = new Date(now.getTime() + timeZoneMillis);
console.log(now, inZone);
类似这样的东西会将它们转换为毫秒时间戳,减去那么多小时,然后将其转换回一个日期。

当你为负数时,你应该“循环回到”23:59。您只需添加一些内容来检查它是否为负值,然后只需重新添加缺少的时间:

function CalcTime(UTCTIME, TIMEZONEOFFSETTIME) {
      if (oparator == "+") {
        var FT = UTCTIME + TIMEZONEOFFSETTIME;
        FT = FT.toFixed(2);
        floatToTime(FT);
      } else {
        var FT = UTCTIME - TIMEZONEOFFSETTIME;

        // Offset any negative times;
        if (FT < 0) {
          FT += 24;
        }

        FT = FT.toFixed(2);
        floatToTime(FT);
      }
    }
函数计算时间(UTCTIME,TIMEZONEOFFSETTIME){
如果(运算器==“+”){
var FT=UTCTIME+时区偏移设置时间;
FT=FT.toFixed(2);
浮动时间(FT);
}否则{
var FT=UTCTIME-时区偏移设置时间;
//抵消任何负时间;
如果(英尺<0){
FT+=24;
}
FT=FT.toFixed(2);
浮动时间(FT);
}
}
但理想情况下,您真的不想处理此类时区问题,因为其他库已经在处理它了,即moment.js

函数runClock(){
setInterval(函数(){
//调试器
变量时间=新日期();
//从HTML元素获取时区
//ex:+:5:30
var getTimezone=“-:7:0”//$(“#时区”).text();
//拆分为数组以获取运算器(正时区和负时区)
var opator=getTimezone.split(“:”[0];
var timezone=getTimezone.split(“:”[1]+“:”+getTimezone.split(“:”[2];
//获取UTC小时数
var hours=5//time.getUTCHours();
var minutes=0//time.getUTCMinutes();
var UTCTIME=时间字符串长度(小时+“:”+分钟);
var TIMEZONEOFFSETTIME=timeStringToFloat(时区);
var finalTime=“”;
//将冒号后面的时间转换为小数
//例:1:45=1.75
函数timeStringToFloat(时间){
var hoursMinutes=time.split(/[.:]/);
var hh=parseInt(小时分钟[0],10);
var mm=hoursMinutes[1]?parseInt(hoursMinutes[1],10):0;
返回hh+mm/60;
}
//将浮点后面的时间转换为冒号
//例:1.75=1:45
函数floatToTime(英尺){
var splittedTime=FT.toString().split(“.”);
var hh=分割时间[0];
var mm=“”;
如果(拆分时间[1]){
mm=数学圆((分割时间[1]/100)*60);
}否则{
mm=“0”;
}
最终时间=hh+“:”+((毫米<10)?(“0”+毫米):毫米);
}
//计算时间(UTC+或-时区)
//例如:00:15(UTC)+5:30=5:45
函数计算时间(UTCTIME、时区偏移设置时间){
如果(运算器==“+”){
var FT=UTCTIME+TI