Получение дня от даты, используя jquery / javascript - PullRequest
7 голосов
/ 07 января 2012

У меня есть дата в этом формате "ГГГГ / ММ / ДД".Теперь я хочу получить день из этого формата.Как я могу получить его с помощью JavaScript или JQuery?Одним из способов является

 $(document).ready(function() {

var d = new Date();

alert(d.getDay());
 } );

, но проблема здесь в том, что переменная d содержит дату в этом формате

Sat Jan 07 2012 18:16:57 GMT+0200 (FLE Standard Time)

Как я могу получить день от даты в вышеуказанном формате?


Вот как выглядит моя функция

function dayOfWeek(d) {
            var dayNames = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Sunday');
            var currentDate = Math.round(+new Date(d)/1000);
            var nData = new Date(currentDate);
            //alert(nData);
            //alert(nData.getDay());
            //var day = d.split("-")[2];
            //var t = day.replace("0","");
            //alert(t);
            return dayNames[nData.getDay()];
        }

Что я делаю, я передаю дату в формате "ГГГГ-ММ-ДД", и она преобразует эту дату в метку времени Unix, а затем яполучить день, а затем вернуть день как воскресенье или понедельник и т. д. Но здесь возвращается только пятница, что неверно.Когда я меняю день в дате, он должен возвращать тот же день в массиве.

Ответы [ 6 ]

5 голосов
/ 07 января 2012

Date Object имеет метод toString, который выводит строку даты UTC в описанном вами формате.Однако Date Object также имеет множество других методов.

Чтобы получить день месяца (1-31), вы используете метод getDate:

d = new Date( ).getDate( ) ;

Ваша строка даты имеет формат, который не будет распознаваться конструктором Date.Проверьте эту строку на предмет ее возвращаемого значения:

var nData = new Date(currentDate) ;

Будет возвращено:

"invalid Date"

Если формат даты (d) такой,

"dd-mm-yyyy"

сделайте это,

var a = d.split("-") ;
var date = new Date( a[2], (a[1] - 1), a[0] ) ;

это должно заработать вам Date Object.Или используйте плагин datepicker для jQuery, как описано в этом сообщении .


Ссылка на документацию MDN

2 голосов
/ 07 января 2012

Вместо использования встроенных преобразований даты в строку, которые зависят от реализации, и вместо того, чтобы самостоятельно кодировать логику, лучше использовать подходящую библиотеку. Вот один простой способ сделать это, используя Globalize.js :

function dayOfWeek(s) {
  var d = Globalize.parseDate(s, 'yyyy/M/d');
  if(d == null) { 
    return null;
  } else {
   return Globalize.format(d, 'dddd');
  }
}

Это будет анализировать ввод в формате ГГГГ / ММ / ДД (с очевидными изменениями, если ваш фактический формат - ГГГГ-ММ-ДД), точнее так, что год состоит из 4 цифр (гггг) и месяца (М) и день (d) может состоять из 1 или 2 цифр (вместо этого используйте MM и dd, если вы хотите ввести 2 цифры). Затем записывается дата, так что в качестве слова (dddd) записывается только день недели. Если ввод не в указанном формате, функция возвращает ноль, и у вас, конечно, должна быть запланированная обработка ошибок для этого случая.

В качестве дополнительного бонуса код будет готов к глобализации: если вам когда-нибудь понадобится изменить код для создания имен на другом языке, вы просто добавляете один вызов функции, который устанавливает языковой стандарт (язык) для Globalize.js.

1 голос
/ 05 ноября 2012
var d=new Date();
var weekday=new Array(7);
weekday[0]="Sunday";
weekday[1]="Monday";
weekday[2]="Tuesday";
weekday[3]="Wednesday";
weekday[4]="Thursday";
weekday[5]="Friday";
weekday[6]="Saturday";

var n = weekday[d.getDay()];

чек

1 голос
/ 07 января 2012

Относительно нового обновленного кода:

$(function()
  {
$("a").click(function () {
            var dayNames = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
            var nData = new Date();
            //alert(nData);
            //alert(nData.getDay());
            //var day = d.split("-")[2];
            //var t = day.replace("0","");
            //alert(t);
            alert(dayNames[nData.getDay()]);
        });
});

приведенный выше код является примером. Отредактируйте http://jsfiddle.net/qgDHB/ с вашими потребностями.

Я удалил некоторые ненужные строки.

0 голосов
/ 17 января 2014

Вдохновленный ответом Globalize выше, вот как это сделать в библиотеке Sugar.js :

<script src="sugar.min.js"></script>
...
var test = Date.create(d);
console.log(test.format("{Weekday}"));

d может быть в различных форматах (включая строку или секунду с 1970 г. или объект даты JS), и варианты выходного формата одинаково полны.

Sugar.js минимизирован на 17,9 Кб и содержит gzip (который включает в себя все другие функции, которые он добавляет, а не только дату); это примерно вдвое больше Moment.js, альтернативы, которую я рассматривал. Но Moment.js не имеет эквивалента форматов {dow} или {weekday}.

0 голосов
/ 07 января 2012

Является ли «формат», о котором вы говорите, обычной строкой?

тогда вы можете сделать это

var theDay = theDate.split("/")[2];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...