使用奇怪的格式将日期从本地时间更改为 UTC
Change the date from local time to UTC with weird format
我正在尝试将时间和日期字符串从本地时间转换为 UTC。
这是我的资料:
我使用全日历,当用户点击一个日期时,它会触发一个模式,在模式中,有一个字段供用户选择日期
example
例如,假设用户想要使用该日期,现在我需要将其转换为 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.fromFormat
and DateTime.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>
我正在尝试将时间和日期字符串从本地时间转换为 UTC。 这是我的资料:
我使用全日历,当用户点击一个日期时,它会触发一个模式,在模式中,有一个字段供用户选择日期 example
例如,假设用户想要使用该日期,现在我需要将其转换为 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.fromFormat
and DateTime.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>