簡體   English   中英

將具有完整月份名稱和時間的日期轉換為ISO日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM