将RFC 822日期转换为javascript的有效日期

时间:2011-09-12 18:40:27

标签: javascript date

我正在使用脚本日历,当我选择日期时,它会将其转换为新格式(yyyy-mm-dd)

它适用于大多数浏览器,但在Firefox和Opera中,我得到的日期格式无效,因为我使用的格式是RFC 822。

我正在寻找一种转换此日期格式的方法

示例:

Thu Sep 08 2011 12:00:00 GMT-0400 (EDT)

并将其更改为

2011-09-08

可以在javascript中完成吗?

更新

这是我的代码试图将(EDT)替换为空白

$(".taskDate").datepick({
          onSelect: function(selectedDate){
            selectedDate = selectedDate.replace(/ \(.+\)/, '');
            //alert(selectedDate);
            var newDate = new Date(selectedDate);
            $(".selectedDate").text(newDate.getFullYear()+'-'+(newDate.getMonth()+1)+'-'+newDate.getDate());
            location.href="index.php?date="+newDate.getFullYear()+'-'+(newDate.getMonth()+1)+'-'+newDate.getDate();
          }
        });

现在我收到错误

selectedDate.replace is not a function

怎么回事?

更新2

修正了它,因为它似乎是一个对象,而不是一个darn字符串。 加入

selectedDate = selectedDate.toString();
新的Date()之前的

;

现在它适用于所有浏览器......

3 个答案:

答案 0 :(得分:2)

适用于Firefox6,请参阅我的jsfiddle

var sOriginalDate = 'Thu Sep 08 2011 12:00:00 GMT-0400 (EDT)';
var oDate = new Date(sOriginalDate);
var iMonth = oDate.getMonth() + 1;
var iDay = oDate.getDate();
var sNewDate = oDate.getFullYear() + '-'
    + (iMonth < 10 ? '0' : '') + iMonth + '-'
    + (iDay < 10 ? '0' : '') + iDay;
alert(sNewDate);

答案 1 :(得分:1)

由于日期是RFC 822,您可以将其解析为有效日期(结束的EDT不会影响结果):

var dateAsDateObject = new Date(Date.parse(dateInRFC822Format));

这适用于dateInRFC822Format等于"Thu Sep 08 2011 12:00:00 GMT-0400 (EDT)""Thu Sep 08 2011 12:00:00 GMT-0400"

现在,您可以从dateAsDateObject获取所需信息:

  • 年:dateAsDateObject.getFullYear()
  • 月:dateAsDateObject.getMonth()
  • 天:dateAsDateObject.getDay()

注意:格式化,如果您不介意使用jqueryui,也可以使用$.datepicker.formatDate()方法。例如。 var stringRepresentation = $.datepicker.formatDate('yy-mm-dd', dateAsDateObject);

答案 2 :(得分:0)

尝试:

var mydate = new Date(originaldate);
mydate = mydate.getYear() + '-' + (mydate.getMonth() + 1) + '-' + mydate.getDate();