* Дати в JavaScript
Публикувано на 11 септември 2009 в раздел ХHTML.
Не е рядък случая когато ни се налага да работим с дата и час. Това се налага винаги когато имаме нужда да работим с календар. Например ако имаме статия, която е публикувана на определена дата и искаме да видим "на колко дни е тя". В социалните мрежи често има функционалности за позрав при рожден ден. Друг случай е когато създаваме таймери.
JavaScript ни дава един изключително полезен обект - дата. Дефинира се по следния начин:
var currentdate = new Date(); document.write(currentdate);
Както се досещате от името на променливата, така извикана функцията Date() връща текущото време. Резултатът от този пример ще е нещо подобно на:
Fri Sep 11 2009 00:01:43 GMT+0300 (FLE Daylight Time)
Fri означава петък (дните от седмицата са Mon, Tue, Wed, Thu, Fri, Sat и Sun). Следва трибуквен код за месец (Sep - септември). Числото 11 отговаря за деня, а 2009 е годината (по американски стандарт месецът се пише преди деня). Числата 00:01:43 отговарят за час, минута и секунда, а GMT+0300 е отклонението на часовата зона спрямо Гринуич (България е в часова зона +0200).
Естествено този формат на датата не е много удобен. Понякога ни трябва само денят, друг път само годината или часа. За това обектът от тип Date ни предоставя редица готови функции:
- getDate() - връща пореден ден от месеца. От примера currentdate.getDate() ще върне 11. Естествено числото е в интервала от 1 до 31;
- setDate(<число от 1 до 31>) - променя деня в променливата;
- getDay() - връща деня от седмицата. Ако например днес е петък (Fri), то currentdate.getDay() ще върне числото 5;
- getMonth() - връща поредния номер на месеца, но от 0 до 11! Обърнете специално внимание на този факт - септември е 9ти месец в календара, на getMonth() ще върне числото 8!;
- setMonth(<число от 0 до 11>) - променя месеца от стойността на променливата;
- getYear() - връща число разликата между текущата година и 1900. Например ако годината е 2009, то числото върнато от функцията ще бъде 109 (2009-1900 = 109);
- setYear(<цяло число>) - променя стойността на годината. Приема както положителни, така и отрицателни числа, които отговарят на реалната година. Обърнете внимание, че за разлика от getYear() тук НЕ се работи с разликата с 1900, а числото отговаря за самата година. Например currentdate.setYear(1998) ще настрои годината на 1998;
- getHours() - връща часа. От примера currentdate.getHours() връща 0. Числото е от 0 до 23;
- setHours(<число от 0 до 23>) - променя стойността на часовете в променливата;
- getMinutes() - връща минутите - число от 0 до 59;
- setMinutes(<число от 0 до 59>) - променя стойността на минутите в променливата;
- getSeconds() - връща секундите като число от 0 до 59;
- setSeconds(<число от 0 до 59>) - променя секундите в променливата;
- getTime() - връща броят милисекунди изтекли от 00:00:00 на 1ви януари 1970 до стойността на променливата. Забележете, че в стандартния изход не присъстваха милисекунди, но въпреки това операторът "new Date()" ги е записал в променливата;
- setTime(<милисекунди от 1.1.1970>) - задава дата и час чрез милисекунди;
- setFullYear(<година>, <месец>, <ден>) - настройва едновременно месец, ден и година;
- toGMTString() - превръща времевата зона в GMT и променя датата и часа според нея;
- toLocaleString() - превръща в датата и часа в локална зона. Използват се настройките на операционната система и изходът зависи от тях;
- getTimezoneOffset() - разликата в минути от текущо настроената часова зона и GMT
Последната функция изисква специално внимание. От примера видяхте, че датата се показа като GMT0300, тоест разликата между GMT и GMT0300 е точно -3 часа или -180 минути. Така ако искаме да видим локалното време ще напишем:
var currentdate = new Date(); var timezone = -currentdate.getTimezoneOffset()/60; document.write("My current timezone is "+timezone);
Въпросът за настройка на вашата часова зона без да използваме toLocaleString(), което променя формата, е по-сложен. За целта е нужно сами да напишем функция. Няма да се занимаваме подробно с това - в интернет се намират редица готови скриптове за настройка на часова зона.
Накрая ще дадем един прост пример - скрипт, в който вашата дата на раждане е зададена чрез три променливи day, month и year. Скрипта ще покаже дали имате рожден ден в момента или не:
var day = 11; var month = 9; var year = 1982; var currentdate = new Date(); if ((day==currentdate.getDate()) && (month==currentdate.getMonth()+1)){ document.write("Happy Birthday!"); } else{ document.write("No birthday"); }
Е, очевидно е, че не използвахме year никъде в проверките, но не беше и нужно :)
Добави коментар