2016-10-04 113 views
0

我有一个字符串变量"PublishDate",然后当我检查使用"PublishDate.value"值返回像的Javascript:全月将字符串转换为日期对象

"October 04, 2016 9:28 AM"

一个字符串,我需要将其转换为一个日期被格式化像"10/04/2016"

对象我不知道这是如何做到的javascript:

var d = new Date("October 04, 2016 9:28 AM"); 
var date = d.getDate(); 
var month = d.getMonth(); 
var year = d.getFullYear(); 
var hours = d.getHours(); 
var min = d.getMinutes(); //10/04/2016 
console.log(month+1+'/'+date+'/'+year); 
+0

要么你有个约会对象,或者您有字符串'“2016年10月4日”',你不能在同一时间*兼得(但你可以有都在不同的变量)* – adeneo

+0

你做了什么研究,你有什么尝试?在搜索引擎中使用此问题中的关键字会产生很多结果 – charlietfl

+0

只需解析字符串并自己创建日期对象。 –

回答

1

首先,con使用Date constructor是用vert日期字符串为Date对象:

var d = new Date(PublishDate.value); 

编辑:始终考虑您的格式可能不被浏览器支持的情况下。在Firefox的情况下,MDN指出,它将支持certain date formats

该字符串应该是由Date.parse()方法 (符合IETF-RFC 2822个时间戳,也是一个版本的识别的格式ISO8601)。

IE's MSDN Javascript reference还说:

它首先试图通过使用ISO Date Format解析日期字符串。如果 日期字符串不是ISO格式,JavaScript会尝试使用其他Other Date Formats解析日期 。

此外,认为MDN本身不鼓励使用构造函数或Date.parse()解析字符串日期,即​​使它适用于您的具体情况:

注:解析日期字符串与日期构造(和 Date.parse,它们是等效的)由于 浏览器的差异和不一致而被强烈阻止。

如果您需要支持其他品种的日期格式或各种浏览器,你也可以考虑Momtent.js JavaScript库或@ RobG的和@ adeneo的回答与正则表达式做自己的分析,等等。


然后,你需要提取你想要的(月,日,年)的部分,并用斜杠作为分隔符将它们连接起来的一个字符串,像@ user3254198的答案或@Steeve Pitis的回答是:

d.getDate() + '/' 
    + (d.getMonth() + 1) + '/' 
    + d.getFullYear() 

请记住,PublishDate.value.getMonth()方法返回月份的基于零的月份数字表示形式,因此如果您想要1-12个值,请向其中添加一个+1

随意问任何进一步!祝你好运。

+0

真的,您的浏览器输出日期对象时的格式? Mine会输出UTC日期,如'2016-10-04T09:28:00.000Z'等? – adeneo

+0

是的!减去GMT部分:'console.log(new Date()。toString());'在我的浏览器中打印Tue Oct 04 2016 10:36:13 GMT-0600'。 –

+0

这还没有接近'2016年10月4日上午9时28分' – adeneo

0

在SO上有很多这样的问题...下次尝试搜索一下。

var date = new Date(PublishDate.value); 
console.log((date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear()); 
+0

解析OP日期格式完全取决于实现,可能会返回正确的日期,错误的日期或无效的日期。编写一个简单的函数或使用可用的许多解析器之一。 – RobG

1

// Example PublishDate result 
 
var PublishDate = { 
 
    value: 'October 04, 2016 9:28 AM' 
 
}; 
 

 
// convert "date string" into "date object" 
 
var date = new Date(PublishDate.value); 
 

 
// build required "date string" 
 
var dateShort = (date.getMonth() +1) + '/' 
 
    + date.getDate() + '/' 
 
    + date.getFullYear(); 
 

 
// console log to show result 
 
console.log(dateShort);

+0

需要在'date.getMonth()'部分添加一个'+ 1',因为该方法返回一个基于零的月份编号,因此它正在打印 10/4/2016而不是9/04/2016 –

+0

啊对了我修复,现在感谢让我现在 – user3254198

2

使用几个月得到的数值,然后就分析它的数组,但是你会喜欢

var months = [ 
 
\t "January", 
 
\t "February", 
 
\t "March", 
 
\t "April", 
 
    \t "May", 
 
    \t "June", 
 
\t "July", 
 
    \t "August", 
 
    \t "September", 
 
\t "October", 
 
\t "November", 
 
\t "December" 
 
]; 
 

 
function pad(n) { return n<10?'0'+n:n } 
 

 
var PublishDate = { 
 
\t value : "October 04, 2016 9:28 AM" 
 
} 
 

 
var parts = PublishDate.value.split(/[\s\,\:]+/); 
 
var year = +parts[2]; 
 
var month = months.indexOf(parts[0]); 
 
var day = +parts[1]; 
 

 
var date = new Date(year, month, day);     // date object 
 
var str = pad(month+1) + '/' + pad(day) + '/' + year; // the string "10/04/2016" 
 

 
console.log(date); 
 
console.log(str);
.as-console-wrapper {top : 0}

+0

哇实际上有一个更简单的方法^^'新日期(“2016年10月04日上午9时28分”)'工作正常^^ –

+0

@SteevePitis - 对你有好处,但它不是有效的ISO 8601日期,引擎是否能够解析它,将取决于实现,并且根本不能保证。 – adeneo

1

使用Date构造函数解析像“2016年10月4日上午9点28分”的字符串完全取决于实现,可能会导致错误的日期或无效的日期,所以要么使用解析器(有很多好的解析器)或者自己编写一个小函数来解析字符串。

但是,如果你只是想重新格式化它,那么根本不需要解析到日期,只需重新格式化字符串。例如。

/* Reformat a string like October 04, 2016 9:28 AM to m/d/y format 
 
** @param {string} s - string in format MMMM DD, YYYY h:mm ap 
 
** @returns {string} reformatted date in MM/DD/YYYY format 
 
*/ 
 
function reformatDate(s) { 
 
    var months = {jan:'01',feb:'02',mar:'03',apr:'04', may:'05',jun:'06', 
 
       jul:'07',aug:'08',sep:'09',oct:'10',nov:'11',dec:'12'}; 
 
    var b = s.match(/\w+/g) || []; 
 
    return months[b[0].toLowerCase().substr(0,3)] + '/' + b[1] + '/' + b[2]; 
 
} 
 

 
console.log(reformatDate('October 04, 2016 9:28 AM')); 
 
      

相关问题