我收到了UTC时区的字符串格式化日期。我需要使用jquery或javascript在用户的当前时区转换此日期时间。
我得到了这个:
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
答案 0 :(得分:4)
如果你可以分开选择那种格式,或者获得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))
month
中的Date.UTC
为零,例如十月将是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()
,并使用强大的格式库,而不是滚动自己的格式库以显示它的方式。
答案 1 :(得分:1)
您应该稍微处理该字符串以提取年,月,日,小时和分钟。
然后,您可以使用以下命令创建具有该UTC日期的本地日期:
var time = new Date ( Date.UTC('year', 'month', 'day', 'hour', 'minute') );
就我而言,'2015年10月16日下午9:43'返回:'2015年11月16日星期一07:43:00 GMT-0200(Hora de verano de Argentina)'。