从 JS Date 对象中提取时间而不偏移时区
Extract time from JS Date object without offsetting the Time zone
所以我们有多个客户,它们位于多个时区。我从 API 中提取了一些日期,而这个字符串中的 dates/times 正是我需要显示的。我一直在研究这个,并挖掘了一段时间,但仍然没有得出明确的答案。输入的字符串格式如下:
"2017-12-29T20:00:00"
我想要的是将日期和时间按原样提取到两个字符串中(没有时区偏移,无论查看器位于何处)但是在这样做时遇到了一些问题。也希望以正确的方式格式化它。示例:
"M/d/yyyy"
"hh:mm AM/PM" (12 hour)
我已经尝试了很多方法来解决这个问题,我真的不想只获取子字符串,但我有点想这样做。感谢任何帮助。
使用此代码:
function formatAMPM(date) {
var hours = date.getUTCHours();
var minutes = date.getUTCMinutes();
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;
}
var str = "2017-12-29T20:00:00";
var dt = new Date(str + "Z");
console.log("M/d/yyyy");
console.log((dt.getUTCMonth() + 1) + '/' + dt.getUTCDate() + '/' + dt.getUTCFullYear());
console.log("hh:mm AM/PM");
console.log(formatAMPM(dt));
考虑重新格式化字符串,它避免了内置解析器和时区的所有问题:
function reformatTimestamp(s) {
function z(n){return (n<10?'0':'')+ +n}
var b = s.split(/\D/);
var h = b[3]%12 || 12;
var ap = b[3] < 12? 'AM':'PM';
return b[1] + '/' + b[2] + '/' + b[0] +
' ' + z(h) + ':' + z(b[4]) + ' ' + ap;
}
console.log(reformatTimestamp('2017-12-29T20:00:00')) // 12/29/2017 08:00 PM
我认为用前导零填充月份和日期会更好(但我也会使用明确的日期格式,如 DD-MMM-YYYY,而不是特殊的 m/d/y)。
所以我们有多个客户,它们位于多个时区。我从 API 中提取了一些日期,而这个字符串中的 dates/times 正是我需要显示的。我一直在研究这个,并挖掘了一段时间,但仍然没有得出明确的答案。输入的字符串格式如下:
"2017-12-29T20:00:00"
我想要的是将日期和时间按原样提取到两个字符串中(没有时区偏移,无论查看器位于何处)但是在这样做时遇到了一些问题。也希望以正确的方式格式化它。示例:
"M/d/yyyy"
"hh:mm AM/PM" (12 hour)
我已经尝试了很多方法来解决这个问题,我真的不想只获取子字符串,但我有点想这样做。感谢任何帮助。
使用此代码:
function formatAMPM(date) {
var hours = date.getUTCHours();
var minutes = date.getUTCMinutes();
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;
}
var str = "2017-12-29T20:00:00";
var dt = new Date(str + "Z");
console.log("M/d/yyyy");
console.log((dt.getUTCMonth() + 1) + '/' + dt.getUTCDate() + '/' + dt.getUTCFullYear());
console.log("hh:mm AM/PM");
console.log(formatAMPM(dt));
考虑重新格式化字符串,它避免了内置解析器和时区的所有问题:
function reformatTimestamp(s) {
function z(n){return (n<10?'0':'')+ +n}
var b = s.split(/\D/);
var h = b[3]%12 || 12;
var ap = b[3] < 12? 'AM':'PM';
return b[1] + '/' + b[2] + '/' + b[0] +
' ' + z(h) + ':' + z(b[4]) + ' ' + ap;
}
console.log(reformatTimestamp('2017-12-29T20:00:00')) // 12/29/2017 08:00 PM
我认为用前导零填充月份和日期会更好(但我也会使用明确的日期格式,如 DD-MMM-YYYY,而不是特殊的 m/d/y)。