将UTC日期时间转换为本地日期时间。

534

我从服务器获取的日期时间变量格式为:6/29/2011 4:52:48 PM,并且它是以UTC时间表示的。 我希望使用JavaScript将其转换为当前用户的浏览器时区。

请问如何使用JavaScript或jQuery实现?


代码示例在此处: https://dev59.com/vG865IYBdhLWcg3wZdxW - Andrew Lewis
7
注意,这是一个奇怪的日期格式,所以一定要在使用任何解决方案时明确指定它。如果可能的话,让服务器以ISO格式发送日期。 - Michael Scheper
你好,我曾经遇到过类似的问题,我通过在将日期/时间发送到服务器之前进行转换来解决它,使用以下代码:var date = new Date('2020-11-06T01:30:00.000Z'); console.log(date.toLocaleDateString()); console.log(date.toLocaleString()); console.log(date.toLocaleTimeString()); - FXLima
我的评论是关于示例: (UTC 巴西) 我输入了“15/12/2020 22:30:00”,它发送了:'2020-12-16T01:30:00.000Z'。 - FXLima
39个回答

0

UTC转本地时间再转ISO - 使用Molp Burnbright的答案

因为服务器只接受ISO日期时间格式,所以我将UTC转换为本地时区,并以ISO格式发送到服务器。

在某个地方声明这个变量。

function convertUTCDateToLocalDate(date) {
    var newDate = new Date(date.getTime() - date.getTimezoneOffset()*60*1000);
    return newDate;   
}

如果你需要本地时间并以 ISO 格式显示,可以使用以下代码:convertUTCDateToLocalDate(date).toISOString()


0

我曾经遇到过类似的问题,我使用以下代码(JavaScript)将UTC时间转换为本地时间

let a = new Date()
a = a.getFullYear().toString() + "-" + (a.getMonth() + 1).toString().padStart(2, "0") + "-" + a.getDate().toString().padStart(2, "0")
console.log(a)


0

如果你想将UTC转换为任何时区,我会给出IST的例子

const istOffsetMinutes = 330 ( IST offset in minutes (5 hours and 30 minutes))

const istDate = new Date(date.getTime() + istOffsetMinutes * 60 * 1000);

0

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

我没有使用getTimezoneOffset(),因为它不能返回正确的偏移值。

要求:

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"

0
我写了一个不错的小脚本,它可以将UTC时代转换为客户端系统时区,并以d/m/Y H:i:s(类似于PHP日期函数)格式返回:
getTimezoneDate = function ( e ) {

    function p(s) { return (s < 10) ? '0' + s : s; }        

    var t = new Date(0);
    t.setUTCSeconds(e);

    var d = p(t.getDate()), 
        m = p(t.getMonth()+1), 
        Y = p(t.getFullYear()),
        H = p(t.getHours()), 
        i = p(t.getMinutes()), 
        s = p(t.getSeconds());

    d =  [d, m, Y].join('/') + ' ' + [H, i, s].join(':');

    return d;

};

-1
在JavaScript中我使用了:
var updaated_time= "2022-10-25T06:47:42.000Z"

{{updaated_time | date: 'dd-MM-yyyy HH:mm'}} //output: 26-10-2022 12:00

4
那是Angular,伙计。 - Bryan Rayner

-1
你可以使用 moment.js 文件完成此操作。
很简单,你只需提供时区的位置即可。
例如:如果你想将日期时间转换为亚洲/加尔各答时区,只需提供从 moment.js 获取到的时区位置名称。

var UTCDateTime="Your date obtained from UTC";
var ISTleadTime=(moment.tz(UTCDateTime, "Africa/Abidjan")).tz("Asia/Kolkata").format('YYYY-MM-DD LT');


-1

对于 TypeScript 用户,这里有一个帮助函数:

// Typescript Type: Date Options
interface DateOptions {
  day: 'numeric' | 'short' | 'long',
  month: 'numeric',
  year: 'numeric',
  timeZone: 'UTC',
};

// Helper Function: Convert UTC Date To Local Date
export const convertUTCDateToLocalDate = (date: Date) => {
  // Date Options
  const dateOptions: DateOptions = {
    day: 'numeric',
    month: 'numeric',
    year: 'numeric',
    timeZone: 'UTC',
  };

  // Formatted Date (4/20/2020)
  const formattedDate = new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000).toLocaleString('en-US', dateOptions);
  return formattedDate;
};

-1
function getUTC(str) {
    var arr = str.split(/[- :]/);
    var utc = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]);
    utc.setTime(utc.getTime() - utc.getTimezoneOffset()*60*1000)
    return utc;
}

对于其他访问者 - 使用此函数从UTC字符串获取本地日期对象,应该处理DST并且可在IE,iPhone等设备上使用。

我们拆分字符串(因为JS日期解析在某些浏览器上不受支持) 我们从UTC获取差异并将其从UTC时间中减去,这将给我们本地时间。由于返回的偏移量是根据DST计算的(如果我错了请纠正我),所以它将在变量“utc”中设置那个时间。最后返回日期对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接