2012-01-07 2 views
7

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

$(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()]; 
     } 

То, что я делаю, я передаю дату в формате «YYYY-MM-DD», и он преобразует эту дату в метку времени, а затем я получите день, а затем верните день как воскресенье или понедельник и т. д. Но здесь он возвращается только в пятницу, что является неправильным. Когда я меняю день в день, он должен возвращать тот же день в массиве.

+0

читайте здесь, чтобы посмотреть, как отформатировать дату. http://stackoverflow.com/questions/4802190/how-do-i-format-date-in-jquery-datetimepicker см. Ответ Skilldrick –

+0

Я обновил свой пост, пожалуйста Проверь это. Спасибо – 2619

+0

см. Мой ответ ... PS: Ты забыл субботу: P –

ответ

5

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]) ; 

это должно net you a DateObject. Или используйте плагин datepicker для jQuery, как описано в этом post.


Link to MDN documentation

+0

Пожалуйста, не подписывайте свои сообщения. –

+0

После почти двух лет вы наверняка прочитали http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts уже сейчас ?! Просто напишите ответ. :) –

+0

[Администраторы и моды поддерживают «запрос»] (http://stackoverflow.com/questions/8616719/php-ajax-call-not-showing-ie7-or-8#comment-10695989) и [ FAQ часто делает это в любом случае] (http://stackoverflow.com/faq#signatures). Часть запроса «запрос» в отношении meta больше относится к дискуссии о том, надо ли мне беспокоиться о редактировании вашей подписи. –

0

ли "формат", вы говорите о регулярных строках?

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

var theDay = theDate.split("/")[2]; 
+0

См. Мое обновленное сообщение, это сделает мой вопрос более ясным. Я хочу получить день недели, а затем отобразить его в формате Sunday, Monday. – 2619

1

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

$(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/ с вашими потребностями.

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

2

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

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

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

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

1
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()]; 

check

0

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

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

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

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

Смежные вопросы