Khoảnh khắc Js UTC đến giờ địa phương


145

Tôi đang cố gắng chuyển đổi thời gian UTC sang giờ địa phương. Tôi đã theo dõi ví dụ này từ liên kết này: http://jsfiddle.net/FLhpq/4/light/ . Tôi dường như không thể có được đầu ra địa phương đúng. Ví dụ: nếu 10 giờ 30 sáng tại đây, thay vì nhận 10:30 thì hãy lấy 15: 30. Đây là mã của tôi:

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);

Không có vấn đề gì tôi làm thời gian luôn luôn xuất hiện vào thời gian UTC. Tôi sống ở Houston vì vậy tôi biết múi giờ là vấn đề. Tôi đã theo dõi mã trong liên kết nhưng dường như có thể lấy được giờ địa phương. Tôi đang làm gì sai?

Câu trả lời:


237

Để chuyển đổi thời gian UTC thành Địa phương, bạn phải sử dụng moment.local().

Để biết thêm thông tin, xem tài liệu

Thí dụ:

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

console.log(date); // 2015-09-13 03:39:27

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

console.log(local); // 2015-09-13 09:39:27

Bản giới thiệu:

var date = moment.utc().format();
console.log(date, "- now in UTC"); 

var local = moment.utc(date).local().format();
console.log(local, "- UTC now to local"); 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>


16
không làm việc cho tôi, thời gian vẫn còn hơn 5 giờ so với thời gian của tôi là đúng
brian Scroggins

nếu khoảnh khắc nhận thức được múi giờ địa phương, có cách nào để truy xuất nó hay là khoảnh khắc.tz.guess () cần thiết để làm điều này?
jEremyB

@jEremyB, moment().format('Z')moment().format('ZZ')có thể giúp bạn. Ngoài ra, hãy xem (new Date()).getTimezoneOffset()có lẽ nó đủ cho trường hợp của bạn
sợi trục

@brianScroggins, hãy chắc chắn không quên .utc(date). Trong phần đầu tiên, dòng var local = ...không có nó có thể gây hiểu nhầm.
Jocelyn

62

Thử cái này:

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

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

3
Chỉ định vùng mà nó được lưu làm việc cho tôi (câu trả lời này). Ngoài ra, tìm thấy nó làm cho cuộc sống dễ dàng hơn nếu bạn luôn lưu mọi thứ trong utc sau đó định dạng ở phía khách hàng.
Juan Pablo Ugas

1
Điều này hoạt động trong trường hợp của tôi khi chúng tôi đang tiết kiệm thời gian trong UTC trong db của chúng tôi và chỉ hiển thị thời gian cục bộ trên máy khách. Cảm ơn.
Alex Ehlert

18
let utcTime = "2017-02-02 08:00:13.567";
var offset = moment().utcOffset();
var localText = moment.utc(utcTime).utcOffset(offset).format("L LT");

Hãy thử JsFiddle này


2
Điều này hoạt động rất tốt nhưng tại sao .local () không trả lại kết quả tương tự?
Steve

fiddle này trả về kết quả sau trên máy tính của tôi: 02/2/2017 8:00 AM (Giờ UTC) 02/2/2017 10:00 AM (Giờ địa phương) 02/2/2017 (Giờ địa phương theo cách khác )
Steve

3

Lưu ý: vui lòng cập nhật định dạng ngày cho phù hợp.

Định dạng ngày

   __formatDate: function(myDate){
      var ts = moment.utc(myDate);
      return ts.local().format('D-MMM-Y');
   }

Định dạng thời gian

  __formatTime: function(myDate){
      var ts = moment.utc(myDate);
      return ts.local().format('HH:mm');
  },

3

Để chuyển đổi UTC sang giờ địa phương

let UTC = moment.utc()
let local = moment(UTC).local()

Hoặc bạn muốn trực tiếp có được giờ địa phương

let local = moment()

var UTC = moment.utc()
console.log(UTC.format()); // UTC time

var cLocal = UTC.local()
console.log(cLocal.format()); // Convert UTC time

var local = moment();
console.log(local.format()); // Local time
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>


0

Tôi đã tạo một chức năng chuyển đổi tất cả các múi giờ thành giờ địa phương.

Yêu cầu:

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"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.