這個問題在這里已經有了答案: 在 JavaScript 中將字串決議為日期 (35 個回答) 昨天關閉。
如何7 July 2021 at 1:36:23 AM Z在純 javascript 中決議此示例格式中的日期?即使使用 moment.js 也嘗試了很多東西,但沒有成果。我認為at日期中間是問題所在。任何幫助,將不勝感激。提前致謝
編輯 :
嘗試了replace()評論中提到的功能,它對 chrome 非常有效,但 safari 拋出Invalid Date錯誤。
示例代碼:
function convertUTCDateToLocalDate(date) {
let newDate = new Date(date);
let options = {
year: "numeric",
month: "long",
day: "2-digit",
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
};
return newDate.toLocaleDateString("en", options);
}
let dateString = "7 July 2021 at 1:36:23 AM Z"
console.log(convertUTCDateToLocalDate(dateString.replace('at', ''));
uj5u.com熱心網友回復:
一個簡單的決議器,假設偏移量總是 Z:
// Parse timestamp in format "7 July 2021 at 1:36:23 AM Z"
function parseTS(ts) {
ts = ts.toLowerCase();
let months = ['jan','feb','mar','apr','may','jun',
'jul','aug','sep','oct','nov','dec'];
let [D, M, Y, x, h, m, s, ap, os] = ts.split(/\W/);
return new Date(Date.UTC(Y, months.indexOf(M.substr(0,3)), D,
h%12 (ap == 'pm'? 12 : 0), m, s));
}
['7 July 2021 at 1:36:23 AM Z',
'7 July 2021 at 1:36:23 PM Z'
].forEach(ts => console.log(`${ts} : ${parseTS(ts).toISOString()}`));
如果你想使用 moment.js,除非它是受支持的格式,否則你應該始終使用令牌提供格式作為格式化。“at”可以用方括號省略:
// 7 July 2021 at 1:36:23 AM Z
let d = moment('7 July 2021 at 1:36:23 AM Z', 'D MMMM, YYYY [at] h:mm:ss a Z');
console.log(d.toString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
uj5u.com熱心網友回復:
您可以dateString.replace(/at|Z/g, '')為 Safari使用替換正則運算式,它適用于 Safari 和 Chrome
uj5u.com熱心網友回復:
最好的選擇是從您的字串來自的任何地方請求 ISO 8601 格式的日期時間。也許有一個 API 選項允許您傳遞格式。如果您正在使用某些自定義輸入,則可能還有一個選項可以檢索 ISO 8601 格式的字串。
如果由于某種原因您無法在其源處更改字串,您始終可以手動將其轉換為正確的格式。
const months = {
january: 1,
february: 2,
march: 3,
april: 4,
may: 5,
june: 6,
july: 7,
august: 8,
september: 9,
october: 10,
november: 11,
december: 12,
};
const meridiems = {
am: 0,
pm: 12,
};
const input = "7 July 2021 at 1:36:23 AM Z";
let [day, month, year, _at, time, meridiem, offset] = input.split(" ");
let [hour, minute, second] = time.split(":");
day = day.padStart(2, "0");
month = months[month.toLowerCase()];
month = month.toString().padStart(2, "0");
hour = hour % 12 meridiems[meridiem.toLowerCase()];
hour = hour.toString().padStart(2, "0");
const iso8601 = `${year}-${month}-${day}T${hour}:${minute}:${second}${offset}`;
console.log(iso8601);
console.log(new Date(iso8601));
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/383578.html
標籤:javascript 日期 解析
下一篇:錯誤的轉換日期()PHP
