我正在从一个JSON对象的日期在2012-12-31的格式,并试图将其转换成友好的价值观和输出。
var redeemableDate = item.Deal.RedeemableDate; //this is coming in the form of 2012-12-31
var redeemableDate = new Date(redeemableDate);
var rdDay = weekday[redeemableDate.getDay()]; //using an array with weekdays
var rdDate = redeemableDate.getDate();
var rdMonth = monthNames[redeemableDate.getMonth()]; //using an array with month names
var rdYear = redeemableDate.getFullYear();
response.write('Valid ' + rdDay + ' ' + rdDate + ' ' + rdMonth + ' ' + rdYear + ' ONLY');
的所有作品,发现和Firefox和Chrome花花公子,但Safari和IE(只在IE8测试通过为止)不喜欢它。
在FF和铬我得到预期的:
有效周日2 2012年9月ONLY
但在Safari和IE浏览器,我得到:
有效未定义的NaN NaN月NaN ONLY
当我提醒redeemableDate我已经将它设置为Date对象,Safari浏览器返回“无效的日期”和IE返回“男”之后。 这显然是其中的问题所在。 有没有一种方法我可以让我的值复制到这些浏览器约会对象?
的YYYY-MM-DD(ISO 8601)的日期格式不Safari和IE支撑。 它的EcmaScript 5的一部分的,因此它应该只是一个时间问题。
一个解决方案是在传递的日期作为参数传递给日期。
var date = "2012-12-31".split("-");
var your_date = new Date(date[0], date[1]-1, date[2]);
需要注意的是月参数从零开始(一月份),所以你必须从字符串得到的值减去1。
编辑:对于一个快捷方式看到下面乔拉尔森答案。
你最好自己解析日期字符串:
function dateFromISO( str ) {
var d = null;
str.replace(/^(\d\d\d\d)-(\d\d)-(\d\d)$/, function(_, y, m, d) {
d = new Date(parseInt(y, 10), parseInt(m, 10) - 1, parseInt(d, 10));
});
return d;
}
redeemableDate = dateFromISO( redeemableDate );
即使其他浏览器那些喜欢日期字符串,你有他们的问题总是被解释为UTC。 对我来说,例如,当我传递字符串“2012-12-31”到Firefox,它告诉我,日期是2012年12月30日,因为我的背后UTC 6小时。 换句话说,“2012-12-31”被解释为日期,UTC时间的午夜。 假设你希望每个人都在世界上看到合适的日期,如果你构建Date对象与它的假设是在客户端本地时间数字。
结合插孔和乔·拉尔森的响应,下面的代码工作很适合我:
$scope.formatDate = function(date){
var date = date.split("-").join("/");
var dateOut = new Date(date);
return dateOut;
};
非常适用于Chrome和Safari ... :)
由于杰克和乔·拉森!
旧的Internet Explorer版本(显然您的Safari浏览器的版本)将不会解析YYYY-MM-DD字符串,如new Date('2012-12-31')
另一种选择是jQuery.datepicker.parseDate()
虽然这可能是有点矫枉过正。
在使用PHP Web服务的情况下,我会建议使用返回日期$row['date'] = date('j/n/Y',strtotime($row['date']));
有Safari浏览器/ IE正常功能。