gpt4 book ai didi

javascript - 如何在 JavaScript 中将字符串格式的 UTC 日期无偏移地转换为本地时间?

转载 作者:行者123 更新时间:2023-11-30 08:34:26 24 4
gpt4 key购买 nike

我得到一个带有 UTC 时区的字符串格式日期。我需要使用 将此日期时间转换为用户当前时区中的时间或 .

我得到这个:

9:43pm 16/10/2015 //this is UTC time, I am getting this via an ajax call

我需要将它转换成这样:

12:00pm 16/10/2015 //whatever time by that location

最佳答案

如果您可以分离该格式,或者获得 JavaScript 可以解析的标准格式 - 您可以将其转换为 Date 对象。我没有看到那个日期的偏移量,这在 JavaScript 尝试解析它时会出现问题。假设这就是您所拥有的,我们可以使用以下内容强制使用 UTC 日期......

// ------- new Date(Date.UTC(year, month, day, hour, minute, second))
var date = new Date(Date.UTC(2015, 9, 16, 21, 43, 0));

console.log(date) // Fri Oct 16 2015 15:43:00 GMT-0600 (Mountain Daylight Time (Mexico))
  • 请注意 Date.UTC 中的 month 是从零开始的,例如十月是 9
如果格式正确,

new Date(value) 会自动为我们执行此操作 - 其中 value 是您收到的实际日期值 - 但该格式不会解析原样。如果没有办法解决该格式,您可以操纵它在上面的示例中工作。这是您的示例的未经测试算法...

var formatted = '9:43pm 16/10/2015'

function createDateUTC(formatted) {

var hourOffset = formatted.split(' ')[0].split(':')[1].match(/[a-zA-Z]+/g)[0] === 'pm' ? 12 : 0

var year = parseInt(formatted.split('/').pop());
var month = parseInt(formatted.split('/')[1]) - 1;
var day = parseInt(formatted.split('/')[0].split(' ').pop());
var hour = hourOffset + parseInt(formatted.split(' ')[0].split(':')[0]);
var minute = parseInt(formatted.split(' ')[0].split(':')[1]);

return new Date(Date.UTC(year, month, day, hour, minute, 0));
}

var myDate = createDateUTC(formatted);

JSFiddle Link - 工作演示

查看 UTC()Date Object文档以获取更多信息


此外,为了获得您想要的确切格式,我们可以引入更多函数,这些函数将为我们提供 12:00pm 16/10/2015 格式

function formatAMPM(date) {
var hours = date.getHours();
var minutes = date.getMinutes();
var ampm = hours >= 12 ? 'pm' : 'am';
hours = hours % 12;
hours = hours ? hours : 12; // the hour '0' should be '12'
minutes = minutes < 10 ? '0'+minutes : minutes;
var strTime = hours + ':' + minutes + '' + ampm;
return strTime;
}

function formatMMDDYYYY(inputFormat) {
function pad(s) { return (s < 10) ? '0' + s : s; }
var d = new Date(inputFormat);
return [pad(d.getDate()), pad(d.getMonth()+1), d.getFullYear()].join('/');
}

console.log(formatAMPM(myDate) + ' ' + formatMMDDYYYY(myDate));
// Mountain Daylight Time => -- 3:43pm 16/10/2015

JSFiddle Link - 格式化示例

我建议查看 Moment.js如果您打算进行繁重的日期格式化和操作。


总的来说 - 最好的解决方案是从服务器返回可接受的格式,将其本地解析为本地时间,例如new Date(),并使用强大的格式化库,而不是自己滚动以按您希望的方式显示它。

关于javascript - 如何在 JavaScript 中将字符串格式的 UTC 日期无偏移地转换为本地时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33173357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com