-1

我想从日期开始。假设我的日期是03-08-2013格式的d-mm-yyyy,所以我只想获取d,即上面日期的 03,所以我尝试使用此代码,但它不起作用

注意 我想在不包含任何js的情况下这样做

var date = '08-03-2013';
var d = new Date(date);
alert(d.getDate());
// 2nd way
alert(date.getDate());

它警觉NaN。这段代码缺少什么?这是 jsfiddel 链接Jsfiddle 链接

更新

4

4 回答 4

2

JS(以及许多语言)中的日期解析是有问题的,因为当输入是日期字符串时,什么是什么数据是相当模棱两可的。例如,使用您的日期(2013 年 8 月 3 日)可以表示为

  • 03-08-2013 (dd-mm-yyyy)
  • 08-03-2013 (mm-dd-yyyy)

但是,给出日期字符串,无法判断日期实际上是 2013 年 8 月 3 日还是 2013 年 3 月 8 日。

您应该独立传递您的日期值以保证正确解析日期:

var
    str = '08-03-2013',
    parts = str.split('-'),
    year = parseInt(parts[2], 10),
    month = parseInt(parts[1], 10) - 1, // NB: month is zero-based!
    day = parseInt(parts[0], 10),
    date = new Date(year, month, day);

alert(date.getDate()); // yields 3
于 2013-09-01T13:07:33.987 回答
1

您无法知道访问者的区域设置。

如果您知道字符串的格式总是d-mm-yyyy,那么只需自己解析值:

function GetDay(rawValue) {
    var parts = rawValue.split("-");
    if (parts.length === 3) {
        var day = parseInt(parts[0], 10);
        if (!isNaN(day))
            return day;
    }
    alert("invalid date format");
    return null;
}

现场测试用例

于 2013-09-01T13:06:38.623 回答
1

使用moment.js。它的解析能力比Date类灵活得多。

var m = moment('03-08-2013','DD-MM-YYYY');
var dayOfMonth = m.date();
于 2013-09-02T03:12:39.637 回答
0

使用它你想要的..

var date = '08-03-2013';
date=date.replace(/([0-9]{2})\-([0-9]{2})\-([0-9]{4})/g, '$3-$2-$1');
var d = new Date(date);   
alert(d.getDate());

谢谢

于 2013-09-01T13:01:49.407 回答