[英]Convert date with full month name and time to ISO date
我有一個日期和時間戳,格式為02 December 2016 18:00pm
。
這是由jQuery選擇器生成的:
"datestamp": $('span.article_info__published').text(),
如何將其轉換為2007-07-24T12:50:00+01:00
的格式?
如果可能的話,我想在同一行上做。 否則它需要適應這種結構。
result = {
"other": $('div.article__header h1').text(),
"datestamp": $('span.article_info__published').text(),
"more": $('meta[name="twitter:image"]').attr("content"),
"assorted": $('figcaption.caption').text(),
};
(我不記得目標格式的名稱了……我認為是ISO 8601?)
更新 :以下返回“無效日期” ...
var myDate = new Date("02 December 2016 18:00pm");
document.write(myDate);
您首先需要解析字符串以獲取其組成部分。 然后,您可以生成日期並使用其方法來生成合適的字符串,也可以手動重新設置字符串的格式。 兩種方法非常相似。
我不清楚您為什么要時區偏移。 您可以獨立獲得它,但是如果您僅將所有日期轉換為UTC和ISO 8601,則可以采用主機時區偏移量。 如果UTC正確,則只需解析為Date並使用toISOString即可 。
將時間指定為“ 18:00 pm”是不尋常的,pm部分是多余的。 通常將其指定為“ 1800hrs”,“ 18:00”或“ 6:00 pm”。
// Reformat string, using Date object for // host timezone offset only function reformatDate(s) { function z(n){return ('0'+n).slice(-2)} var b = s.match(/\\d+|[az]+/gi); var months = ['jan','feb','mar','apr','may','jun', 'jul','aug','sep','oct','nov','dec']; var monNum = months.indexOf(b[1].substr(0,3).toLowerCase()); // Host timezone offset for given date and time var tzOffset = new Date(b[2], monNum - 1, b[0], b[3], b[4]).getTimezoneOffset(); var tzSign = tzOffset > 0? '-' : '+'; tzOffset = Math.abs(tzOffset); return b[2] + '-' + z(monNum) + '-' + b[0] + 'T' + b[3] + ':' + b[4] + tzSign + z(tzOffset/60 | 0) + ':' + z(tzOffset%60); } // Reformat string using Date object for // parts and host timezone offset function reformatDate2(s) { function z(n){return ('0'+n).slice(-2)} var b = s.match(/\\d+|[az]+/gi); var months = ['jan','feb','mar','apr','may','jun', 'jul','aug','sep','oct','nov','dec']; var monNum = months.indexOf(b[1].substr(0,3).toLowerCase()); var d = new Date(b[2], monNum - 1, b[0], b[3], b[4]); // Host timezone offset for given date and time var tzOffset = d.getTimezoneOffset(); var tzSign = tzOffset > 0? '-' : '+'; tzOffset = Math.abs(tzOffset); return d.getFullYear() + '-' + z(d.getMonth() + 1) + '-' + z(d.getDate()) + 'T' + z(d.getHours()) + ':' + z(d.getMinutes()) + tzSign + z(tzOffset/60 | 0) + ':' + z(tzOffset%60); } var s = '02 December 2016 18:00pm'; console.log(reformatDate(s)); console.log(reformatDate2(s));
如您所見,您實際上僅是使用Date來獲取時區偏移量,其余月份的值都可以按原樣使用,但month除外,月份必須在兩種情況下都轉換為數字。
還有許多庫可以幫助解析和格式化字符串,例如moment.js (大型,用途廣泛,功能齊全)和fecha.js (小型且功能強大的解析器/格式器)。 在這兩種情況下,您都可以根據需要解析字符串並設置其格式,例如使用fecha.js:
var s = '02 December 2016 18:00pm';
// Create a Date
var d = fecha.parse(s, 'DD MMMM YYYY HH:mm');
// Format string
console.log(fecha.format(d, 'YYYY-MM-DDTHH:mmZZ'));
解析和格式可以是一個語句,但更清楚地表示為2。使用moment.js(對鏈接方法有更好的支持):
moment(s, 'DD MMMM YYYY HH:mm').format('YYYY-MM-DDTHH:mmZZ');
為了將字符串解釋為轉換日期,我需要先從字符串的后面刪除時間“ pm”。
var date = "02 December 2016 18:00pm"
date = date.slice(0, -2);
var myDate = new Date(date);
document.write(myDate);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.