用奇怪的格式将日期从当地时间更改为UTC



我正在尝试转换一个时间&从当地时间到UTC的日期字符串。这是我所拥有的:

我使用fullcalendar,当用户点击一个日期时,它将触发一个模态,在模态中,有一个字段供用户选择日期示例

例如,假设用户想要使用该日期,现在我需要将其转换为UTC。

a =$('#Date').val();
console.log(a);
"December 20, 2021"
b = $('#Time').val();
console.log(b);
"12:30 AM"
c = a + " " + b;
console.log(c);
"12:30 AMDecember 20, 2021"

所以我需要把c变量转换成utc。

现在我遇到的问题是格式,

y = selectedDate = moment(c, 'h:mm DD/MM/YYYY');

不工作我不能100%确定如何正确地做到这一点。

console.log(y.utc());
Object { _isAMomentObject: true, _i: "December 20, 2021 12:30 AM", _f: "h:mm DD/MM/YYYY", _isUTC: true, _pf: {…}, _locale: {…}, _d: Date Mon Dec 20 2021 20:30:00 (local time :D), _isValid: true, _ambigTime: false, _ambigZone: false, … }

谢谢!

您的解析字符串似乎是错误的。您可以使用"MMMM DD, YYYY h:mm A"作为解析字符串。请检查以下示例。

const a= "December 20, 2021"
const b= "12:30 AM"
const c = `${a} ${b}`;
console.log(moment().format("MMMM DD, YYYY h:mm A"))
y = selectedDate = moment(c, "MMMM DD, YYYY h:mm A");
console.log(y.utc());
console.log(y.format("MMMM DD, YYYY h:mm A"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

我真的很喜欢Luxon(Moment的继任者(。

您可以使用它的方法DateTime.fromFormatDateTime.toUTC来获得您需要的数据:

<script type="module">
import {DateTime} from 'https://unpkg.com/luxon@2.2.0/build/es6/luxon.js';
const dateStr = 'December 20, 2021';
const timeStr = '12:30 AM';
const dtString = `${timeStr} ${dateStr}`;
const parseFormat = 'h:mm a MMMM d, y';
const locale = 'en-US';
const dt = DateTime.fromFormat(dtString, parseFormat, {locale});
const logInfo = (name, dt) => console.log(name, dt.toString(), dt.toObject());
logInfo('local', dt);
logInfo('utc', dt.toUTC());
</script>

最新更新