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

Convert RFC 822 date to valid Date for javascript

本文关键字:javascript 有效日期 转换 RFC 日期      更新时间:2023-09-26

我正在使用一个脚本日历,当我选择一个日期时,它会将其转换为新的格式(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

修复了它,因为它看起来是一个对象而不是一个该死的字符串。添加

selectedDate = selectedDate.toString();

before new Date();

适用于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);

由于日期是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获得你需要的信息:

  • year: dateAsDateObject.getFullYear()
  • 月:dateAsDateObject.getMonth()
  • day: dateAsDateObject.getDay()

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

尝试:

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