Используйте формат даты ISO8601 ГГГГ-ММ-ДД THH: mm: ssZ и есть библиотеки стандартизации даты и времени для javascript, а также методы UTC, чтобы избежать проблем с часовым поясом. Самая большая проблема со значениями Date в JavaScript заключается в том, что в объектах Date много неопределенного поведения. Для тех, кому нужен согласованный API-интерфейс Date, я бы предложил использовать фиксированную реализацию, которая переопределяет объект Date по умолчанию, что обеспечивает согласованное поведение во всех браузерах, но будьте осторожны, если у вас есть другие библиотеки, которые зависят от этого.
Я использовал https://github.com/csnover/js-iso8601/ в прошлом без проблем
http://www.w3.org/TR/NOTE-datetime
Поддерживает ли Javascript / EcmaScript3 синтаксический анализ даты ISO8601?
Обновление
В соответствии с просьбой, чтобы на самом деле добиться того, чего вы хотите, если вы не хотите использовать совместимый со стандартами формат даты, вы можете реализовать желаемый объект
var UserDate = (function () {
function UserDate(dateString) {
var dateArray= dateString.split('.'), i;
if (dateArray.length !== 5) {
// Handle this however you want, throw exception,
// bad date type etc
}
// No need to trim, parseInt doesn't care about
// leading or trailing whitespace
for (i = 0; i < dateArray.length; i += 1) {
dateArray[i] = parseInt(dateArray[i], 10);
}
// Check that the date array is well formed here if you want,
// check for NaN and value range
// ...
this._dateArray = dateArray;
}
// Creates a date string from the internal date array
UserDate.prototype.getDate = function () {
var dateString = "", i;
for (i = 0; i < this._dateArray.length; i += 1) {
dateString += this._dateArray[i];
if (i < this._dateArray.length - 1) {
dateString += ".";
}
}
return dateString;
};
// Returns the day value from the internal date array
UserDate.prototype.getDay = function () {
return this._dateArray[0];
};
// Returns the month from the internal date array
UserDate.prototype.getMonth = function () {
return this._dateArray[1];
};
// Returns the year from the internal data array
UserDate.prototype.getYear = function() {
return this._dateArray[2];
};
// Returns the hour from the internal date array
UserDate.prototype.getHour = function() {
return this._dateArray[3];
};
// Returns the minute from the internal date array
UserDate.prototype.getMinute = function() {
return this._dateArray[4];
};
// more prototypes here
return UserDate;
}());
С моими тестами в консоли:
> var someDate = new UserDate("3.11.2012.4.3");
> someDate.getDate()
"3.11.2012.4.3"
> someDate.getYear()
2012
> someDate.getMonth()
11
> someDate.getDay()
3
> someDate.getHour()
4
> someDate.getMinut()
3
Серьезно, не рассматривайте возможность редактирования String.prototype, чтобы предоставить вам эту функциональность. Это очень плохая практика - расширять нативные прототипы в JavaScript, если вы действительно не уверены, что делаете. Конечно, не имеет смысла добавлять такие специальные функции в строковый объект общего назначения. Если вам нужен глобальный доступ к этому объекту UserDate, сделайте его глобальным объектом, как это было бы в этом примере. Опасность в том, что вы не знаете, что сторонние библиотеки делают с прототипом.
http://perfectionkills.com/extending-built-in-native-objects-evil-or-not/
Может быть стоит прочитать, если вам интересны аргументы в целом. Если вы действительно действительно хотите расширить прототип строки, тогда вы можете сделать что-то вроде
String.prototype.getDay = function () {
return this.split('.')[0];
}
Но это сделает меня грустной курицей.