C, PHP, VB, .NET

Дневникът на Филип Петров


* Дати в 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 ни предоставя редица готови функции:

  1. getDate() – връща пореден ден от месеца. От примера currentdate.getDate() ще върне 11. Естествено числото е в интервала от 1 до 31;
  2. setDate(<число от 1 до 31>) – променя деня в променливата;
  3. getDay() – връща деня от седмицата. Ако например днес е петък (Fri), то currentdate.getDay() ще върне числото 5;
  4. getMonth() – връща поредния номер на месеца, но от 0 до 11! Обърнете специално внимание на този факт – септември е 9ти месец в календара, на getMonth() ще върне числото 8!;
  5. setMonth(<число от 0 до 11>) – променя месеца от стойността на променливата;
  6. getYear() – връща число разликата между текущата година и 1900. Например ако годината е 2009, то числото върнато от функцията ще бъде 109 (2009-1900 = 109);
  7. setYear(<цяло число>) – променя стойността на годината. Приема както положителни, така и отрицателни числа, които отговарят на реалната година. Обърнете внимание, че за разлика от getYear() тук НЕ се работи с разликата с 1900, а числото отговаря за самата година. Например currentdate.setYear(1998) ще настрои годината на 1998;
  8. getHours() – връща часа. От примера currentdate.getHours() връща 0. Числото е от 0 до 23;
  9. setHours(<число от 0 до 23>) – променя стойността на часовете в променливата;
  10. getMinutes() – връща минутите – число от 0 до 59;
  11. setMinutes(<число от 0 до 59>) – променя стойността на минутите в променливата;
  12. getSeconds() – връща секундите като число от 0 до 59;
  13. setSeconds(<число от 0 до 59>) – променя секундите в променливата;
  14. getTime() – връща броят милисекунди изтекли от 00:00:00 на 1ви януари 1970 до стойността на променливата. Забележете, че в стандартния изход не присъстваха милисекунди, но въпреки това операторът „new Date()“ ги е записал в променливата;
  15. setTime(<милисекунди от 1.1.1970>) – задава дата и час чрез милисекунди;
  16. setFullYear(<година>, <месец>, <ден>) – настройва едновременно месец, ден и година;
  17. toGMTString() – превръща времевата зона в GMT и променя датата и часа според нея;
  18. toLocaleString() – превръща в датата и часа в локална зона. Използват се настройките на операционната система и изходът зависи от тях;
  19. 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 никъде в проверките, но не беше и нужно :)

 



Добави коментар

Адресът на електронната поща няма да се публикува


*