Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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_Date_Momentjs - Fatal编程技术网

Javascript UTC至当地时间的时刻

Javascript UTC至当地时间的时刻,javascript,date,momentjs,Javascript,Date,Momentjs,我正在尝试将UTC时间转换为本地时间。我一直在此链接中遵循此示例:。我似乎无法获得正确的本地输出。例如,如果这里的时间是上午10:30,而不是10:30,我会得到15:30。这是我的密码: var date = moment.utc().format('YYYY-MM-DD HH:mm:ss'); var localTime = moment.utc(date).toDate(); localTime = moment(localTime).format('YYYY-MM-DD HH:mm

我正在尝试将UTC时间转换为本地时间。我一直在此链接中遵循此示例:。我似乎无法获得正确的本地输出。例如,如果这里的时间是上午10:30,而不是10:30,我会得到15:30。这是我的密码:

var date = moment.utc().format('YYYY-MM-DD HH:mm:ss');

var localTime  = moment.utc(date).toDate();

localTime = moment(localTime).format('YYYY-MM-DD HH:mm:ss');

console.log("moment: " + localTime);

无论我做什么,时间总是在UTC时间出现。我住在休斯顿,所以我知道时区是个问题。我已经按照链接中的代码进行了操作,但似乎可以获得本地时间。我做错了什么?

要将UTC时间转换为本地时间,必须使用
矩.Local()

有关更多信息,请参阅

例子: 演示:
var date=moment.utc().format();
console.log(日期,“-现在是UTC”);
var local=moment.utc(date.local().format();
console.log(本地,“-UTC now to local”)

试试这个

注意:请相应地更新日期格式

格式日期 格式化时间 试试这个:

let utcTime = "2017-02-02 08:00:13";

var local_date= moment.utc(utcTime ).local().format('YYYY-MM-DD HH:mm:ss');

我创建了一个函数,可以将所有时区转换为本地时间。

要求:

1. npm i moment-timezone

function utcToLocal(utcdateTime, tz) {
    var zone = moment.tz(tz).format("Z") // Actual zone value e:g +5:30
    var zoneValue = zone.replace(/[^0-9: ]/g, "") // Zone value without + - chars
    var operator = zone && zone.split("") && zone.split("")[0] === "-" ? "-" : "+" // operator for addition subtraction
    var localDateTime
    var hours = zoneValue.split(":")[0]
    var minutes = zoneValue.split(":")[1]
    if (operator === "-") {
        localDateTime = moment(utcdateTime).subtract(hours, "hours").subtract(minutes, "minutes").format("YYYY-MM-DD HH:mm:ss")
    } else if (operator) {
        localDateTime = moment(utcdateTime).add(hours, "hours").add(minutes, "minutes").format("YYYY-MM-DD HH:mm:ss")
    } else {
        localDateTime = "Invalid Timezone Operator"
    }
    return localDateTime
}

utcToLocal("2019-11-14 07:15:37", "Asia/Kolkata")

//Returns "2019-11-14 12:45:37"

将UTC转换为本地时间

let UTC = moment.utc()
let local = moment(UTC).local()
let local = moment()
或者你想直接得到当地时间

let UTC = moment.utc()
let local = moment(UTC).local()
let local = moment()
var UTC=moment.UTC()
console.log(UTC.format());//UTC时间
var cLocal=UTC.local()
console.log(cLocal.format());//转换UTC时间
var local=力矩();
console.log(local.format());//当地时间

这对我来说是有效的,它需要时刻tz和时刻tz

const guess=moment.utc(date.tz(moment.tz.guess());

const correctTimezone=guess.format()
我编写了这个代码沙盒,用于从UTC到本地时间以及从本地时间到UTC的往返。您可以更改时区和格式。享受吧

Codesandbox()的完整示例:


以下是我使用Intl api所做的工作:

let currentTimeZone = new Intl.DateTimeFormat().resolvedOptions().timeZone; // For example: Australia/Sydney
这将返回一个时区名称。将此参数传递给以下函数以获取时间

let dateTime = new Date(date).toLocaleDateString('en-US',{ timeZone: currentTimeZone, hour12: true});

let time = new Date(date).toLocaleTimeString('en-US',{ timeZone: currentTimeZone, hour12: true});
您还可以使用以下方式设置时间的格式:

moment(new Date(`${dateTime} ${time}`)).format('YYYY-MM-DD[T]HH:mm:ss');

我知道这是个老问题,但我并没有真正得到我想要的。我有一个UTC日期时间,它的格式没有时区。所以我必须这样做:

let utcDatetime = '2021-05-31 10:20:00';
let localDatetime = moment(utcDatetime + '+00:00').local().format('YYYY-MM-DD HH:mm:ss');

对我来说不起作用,时间仍然比我的浏览器时间提前了5个小时,这是正确的如果momentjs知道本地时区,有没有办法检索它,或者需要矩.tz.guess()来执行此操作?@jEremyB,
moment().format('Z')
moment().format('ZZ')
可以帮助您。另外,看一看
(new Date())。getTimezoneOffset()
也许对您来说已经足够了case@brianScroggins,请确保不要忘记
.utc(日期)
。在第一部分中,行
var local=…
没有它可能会产生误导。我在nodeJs环境中使用了矩,并且我必须在environment vars中设置时区以便正确工作:TZ='Europe/Vienna'指定保存它的区域对我有效(这个答案)。此外,我们发现,如果总是以utc格式保存内容,然后在客户端设置格式,那么生活会更轻松。在我的案例中,我们在数据库中以utc格式保存时间,并且只在客户端显示本地时间,这一点很有效。谢谢。这很有效,但是为什么.local()不返回相同的结果呢?这把小提琴在我的计算机上返回以下结果:2017年2月2日上午8:00(UTC时间)2017年2月2日上午10:00(当地时间)2017年2月2日上午9:00(当地时间另一种方式)这对我有效!非常感谢。我使用了utcToLocal(“2019-11-1407:15:37”,矩.tz.guess())
moment(new Date(`${dateTime} ${time}`)).format('YYYY-MM-DD[T]HH:mm:ss');
let utcDatetime = '2021-05-31 10:20:00';
let localDatetime = moment(utcDatetime + '+00:00').local().format('YYYY-MM-DD HH:mm:ss');