home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / borland / ib / setups / intrabld / data.z / DATEEX.JS < prev    next >
Text File  |  1996-12-11  |  14KB  |  354 lines

  1. /****************************************************************************\
  2. *                                                                            *
  3. * DateEx.js  --  A subclass of the Date object that adds more string         *
  4. *                conversion routines.                                        *
  5. *                                                                            *
  6. * Parameters:  The DateEx class takes the same parameters as the Date class. *
  7. *                                                                            *
  8. * This contains a class definition for DateEx(), which is a subclass of the  *
  9. * Date() class. There are several methods defined for DateEx():              *
  10. *                                                                            *
  11. *    getSDate()     No Parameters                                            *
  12. *                   Returns the date as a character                          *
  13. *                   string in the format:                                    *
  14. *                   Thursday, September 12, 1996                             *
  15. *                                                                            *
  16. *    getSDay()      No parameters                                            *
  17. *                   Returns the character name for the                       *
  18. *                   day of the week, such as Monday.                         *
  19. *                                                                            *
  20. *    getSMonth()    No parameters                                            *
  21. *                   Returns the character name for the                       *
  22. *                   month, such as September.                                *
  23. *                                                                            *
  24. *    getSTime()     2 logical parameters (all optional)                      *
  25. *                    <lSeconds> - true to include seconds                    *
  26. *                    <lTwelve)  - true to return 12 hour time                *
  27. *                   Returns the time as a character                          *
  28. *                   string in one of these formats:                          *
  29. *                     ()             14:23                                   *
  30. *                     (true)         14:23:01                                *
  31. *                     (false,true)   2:23 PM                                 *
  32. *                     (true,true)    2:23:01 PM                              *
  33. *                                                                            *
  34. *   getSTimezone()  No parameters                                            *
  35. *                   Returns the timezone name.                               *
  36. *                                                                            *
  37. * To load this function library in IntraBuilder, use a command like this:    *
  38. *                                                                            *
  39. *     _sys.scripts.load(_sys.env.home() + "apps\\shared\\dateex.js");        *
  40. *                                                                            *
  41. * Updated 10/31/96 by IntraBuilder Samples Group                             *
  42. * $Revision:   1.5  $                                                        *
  43. *                                                                            *
  44. * Copyright (c) 1996, Borland International, Inc. All rights reserved.       *
  45. *                                                                            *
  46. \****************************************************************************/
  47.  
  48. // from winnls.h
  49. // Copyright (c) 1991-1995, Microsoft Corp. All rights reserved.
  50. /*
  51.  *  Time Flags for GetTimeFormat
  52.  */
  53. #define TIME_NOMINUTESORSECONDS    0x00000001  /* do not use minutes or seconds */
  54. #define TIME_NOSECONDS             0x00000002  /* do not use seconds */
  55. #define TIME_NOTIMEMARKER          0x00000004  /* do not use time marker */
  56. #define TIME_FORCE24HOURFORMAT     0x00000008  /* always use 24 hour format */
  57.  
  58.  
  59. /*
  60.  *  Date Flags for GetDateFormat
  61.  */
  62. #define DATE_SHORTDATE             0x00000001  /* use short date picture */
  63. #define DATE_LONGDATE              0x00000002  /* use long date picture */
  64. #define DATE_USE_ALT_CALENDAR      0x00000004  /* use alternate calendar (if any) */
  65.  
  66. /*
  67.  *  Locale types for GetLocaleInfo
  68.  */
  69. #define LOCALE_SDAYNAME1            0x0000002A   /* long name for Monday */
  70. #define LOCALE_SDAYNAME2            0x0000002B   /* long name for Tuesday */
  71. #define LOCALE_SDAYNAME3            0x0000002C   /* long name for Wednesday */
  72. #define LOCALE_SDAYNAME4            0x0000002D   /* long name for Thursday */
  73. #define LOCALE_SDAYNAME5            0x0000002E   /* long name for Friday */
  74. #define LOCALE_SDAYNAME6            0x0000002F   /* long name for Saturday */
  75. #define LOCALE_SDAYNAME7            0x00000030   /* long name for Sunday */
  76.  
  77. #define LOCALE_SMONTHNAME1          0x00000038   /* long name for January */
  78. #define LOCALE_SMONTHNAME2          0x00000039   /* long name for February */
  79. #define LOCALE_SMONTHNAME3          0x0000003A   /* long name for March */
  80. #define LOCALE_SMONTHNAME4          0x0000003B   /* long name for April */
  81. #define LOCALE_SMONTHNAME5          0x0000003C   /* long name for May */
  82. #define LOCALE_SMONTHNAME6          0x0000003D   /* long name for June */
  83. #define LOCALE_SMONTHNAME7          0x0000003E   /* long name for July */
  84. #define LOCALE_SMONTHNAME8          0x0000003F   /* long name for August */
  85. #define LOCALE_SMONTHNAME9          0x00000040   /* long name for September */
  86. #define LOCALE_SMONTHNAME10         0x00000041   /* long name for October */
  87. #define LOCALE_SMONTHNAME11         0x00000042   /* long name for November */
  88. #define LOCALE_SMONTHNAME12         0x00000043   /* long name for December */
  89. #define LOCALE_SMONTHNAME13         0x0000100E   /* long name for 13th month (if exists) */
  90.  
  91. class DateEx extends Date {
  92.    if (DateEx.arguments.length < 1)
  93.       this.setTime(new Date().getTime());
  94.    else {
  95.       var params = "";
  96.       for (var i = 0; i < DateEx.arguments.length; i++) {
  97.           params += "DateEx.arguments[" + i + "],";
  98.       }
  99.       params = params.substring(0,params.length-1);
  100.       var date = eval("new Date(" + params + ")");
  101.       this.setTime(date.getTime());
  102.    }
  103.       
  104.    // prototype the api calls used by the DateEx class
  105.    extern int GetDateFormat(long, unsigned long, void *, char *, char *, int) "kernel32" from "GetDateFormatA";
  106.    extern int GetTimeFormat(long, unsigned long, void *, char *, char *, int) "kernel32" from "GetTimeFormatA";
  107.    extern int GetLocaleInfo(long, long, char *, int) "kernel32" from "GetLocaleInfoA"
  108.  
  109.    function getSDate() {
  110.       // prepare string to receive date from API call
  111.       var sdate = new StringEx().replicate(" ",80);
  112.       // convert date/time to API SYSTEMTIME structure
  113.       var systime = this.getSystemTime();
  114.       // API call
  115.       var len = GetDateFormat(0,DATE_LONGDATE,systime,0,sdate,sdate.length);
  116.       // return without trailing null
  117.       return (sdate.substring(0,len-1));
  118.    }
  119.  
  120.    function getSDay() {
  121.       var localeType = 0;
  122.       switch (this.getDay()) {
  123.       case 0:
  124.          localeType = LOCALE_SDAYNAME7;
  125.          break;
  126.       case 1:
  127.          localeType = LOCALE_SDAYNAME1;
  128.          break;
  129.       case 2:
  130.          localeType = LOCALE_SDAYNAME2;
  131.          break;
  132.       case 3:
  133.          localeType = LOCALE_SDAYNAME3;
  134.          break;
  135.       case 4:
  136.          localeType = LOCALE_SDAYNAME4;
  137.          break;
  138.       case 5:
  139.          localeType = LOCALE_SDAYNAME5;
  140.          break;
  141.       case 6:
  142.          localeType = LOCALE_SDAYNAME6;
  143.       }
  144.       var sday = new StringEx().replicate(" ",40);
  145.       var len = GetLocaleInfo(0,localeType,sday,sday.length);
  146.       return (sday.substring(0,len-1));        
  147.    }
  148.  
  149.    function getSMonth() {
  150.       var month = this.getMonth();
  151.       var smonth = new StringEx().replicate(" ",40);
  152.       var localeType = 0;
  153.  
  154.       switch (month) {
  155.       case 0:
  156.          localeType = LOCALE_SMONTHNAME1;
  157.          break;
  158.       case 1:
  159.          localeType = LOCALE_SMONTHNAME2;
  160.          break;
  161.       case 2:
  162.          localeType = LOCALE_SMONTHNAME3;
  163.          break;
  164.       case 3:
  165.          localeType = LOCALE_SMONTHNAME4;
  166.          break;
  167.       case 4:
  168.          localeType = LOCALE_SMONTHNAME5;
  169.          break;
  170.       case 5:
  171.          localeType = LOCALE_SMONTHNAME6;
  172.          break;
  173.       case 6:
  174.          localeType = LOCALE_SMONTHNAME7;
  175.          break;
  176.       case 7:
  177.          localeType = LOCALE_SMONTHNAME8;
  178.          break;
  179.       case 8:
  180.          localeType = LOCALE_SMONTHNAME9;
  181.          break;
  182.       case 9:
  183.          localeType = LOCALE_SMONTHNAME10;
  184.          break;
  185.       case 10:
  186.          localeType = LOCALE_SMONTHNAME11;
  187.          break;
  188.       case 11:
  189.          localeType = LOCALE_SMONTHNAME12;
  190.       }
  191.       var smonth = new StringEx().replicate(" ",40);
  192.       var len = GetLocaleInfo(0,localeType,smonth,smonth.length);
  193.       return (smonth.substring(0,len-1));        
  194.    }
  195.  
  196.    function getSTime( seconds, twelve ) {
  197.       // prepare string to receive time from API call
  198.       var stime = new StringEx().replicate(" ",20);
  199.       // set the flags based on the parameters
  200.       var flags = (seconds ? 0 : TIME_NOSECONDS) +
  201.                   (twelve ? 0 : TIME_FORCE24HOURFORMAT + TIME_NOTIMEMARKER);
  202.       // convert date/time to API SYSTEMTIME structure
  203.       var systime = this.getSystemTime();
  204.       // API call
  205.       var len = GetTimeFormat(0,flags,systime,0,stime,stime.length);
  206.       // return without trailing null
  207.       return (stime.substring(0,len-1));
  208.    }
  209.  
  210.    function getSTimezone() {
  211.       var offset = new Date("1/1/96").getTimezoneOffset();
  212.       var stimezone = "";
  213.  
  214.       if ( offset <= -720 ) {
  215.          stimezone = "Eniwetok";
  216.       }
  217.       else if (offset <= -660 ) {
  218.          stimezone = "Samoa";
  219.       }
  220.       else if (offset <= -600 ) {
  221.          stimezone = "Hawaii";
  222.       }
  223.       else if (offset <= -540 ) {
  224.          stimezone = "Alaska";
  225.       }
  226.       else if (offset <= -480 ) {
  227.          stimezone = "Pacific";
  228.       }
  229.       else if (offset <= -420 ) {
  230.          stimezone = "Mountain";
  231.       }
  232.       else if (offset <= -360 ) {
  233.          stimezone = "Central";
  234.       }
  235.       else if (offset <= -300 ) {
  236.          stimezone = "Eastern";
  237.       }
  238.       else if (offset <= -240 ) {
  239.          stimezone = "Atlantic";
  240.       }
  241.       else if (offset <= -210 )  {
  242.          stimezone = "Newfoundland";
  243.       }
  244.       else if (offset <= -180 ) {
  245.          stimezone = "Brasilia";
  246.       }
  247.       else if (offset <= -120 ) {
  248.          stimezone = "Mid Atlantic";
  249.       }
  250.       else if (offset <= -60 ) {
  251.          stimezone = "Azores";
  252.       }
  253.       else if (offset <= 0 )    {
  254.          stimezone = "Greenwich Mean";
  255.       }
  256.       else if (offset <= 60 )   {
  257.          stimezone = "Paris";
  258.       }
  259.       else if (offset <= 120 )  {
  260.          stimezone = "Eastern Europe";
  261.       }
  262.       else if (offset <= 180 )  {
  263.          stimezone = "Moscow";
  264.       }
  265.       else if (offset <= 210 ) {
  266.          stimezone = "Tehran";
  267.       }
  268.       else if (offset <= 240 )  {
  269.          stimezone = "Volgograd";
  270.       }
  271.       else if (offset <= 270 ) {
  272.          stimezone = "Kabul";
  273.       }
  274.       else if (offset <= 300 )  {
  275.          stimezone = "Islamabad";
  276.       }
  277.       else if (offset <= 330 ) {
  278.          stimezone = "Bombay";
  279.       }
  280.       else if (offset <= 360 )  {
  281.          stimezone = "Dhaka";
  282.       }
  283.       else if (offset <= 420 )  {
  284.          stimezone = "Jakarta";
  285.       }
  286.       else if (offset <= 480 )  {
  287.          stimezone = "Hong Kong";
  288.       }
  289.       else if (offset <= 540 )  {
  290.          stimezone = "Tokyo";
  291.       }
  292.       else if (offset <= 570 ) {
  293.          stimezone = "Adelaide";
  294.       }
  295.       else if (offset <= 600 )  {
  296.          stimezone = "Sydney";
  297.       }
  298.       else if (offset <= 660 )  {
  299.          stimezone = "Magadan";
  300.       }
  301.       else if (offset <= 720 )  {
  302.          stimezone = "Wellington";
  303.       }
  304.       return (stimezone + " Time");
  305.    }
  306.  
  307.    function getSystemTime() {
  308.    //take an IntraBuilder date/time and return a Windows SYSTEMTIME structure:
  309.    //typedef struct _SYSTEMTIME {  // st  
  310.    //    WORD wYear; 
  311.    //    WORD wMonth; 
  312.    //    WORD wDayOfWeek; 
  313.    //    WORD wDay; 
  314.    //    WORD wHour; 
  315.    //    WORD wMinute; 
  316.    //    WORD wSecond; 
  317.    //    WORD wMilliseconds; 
  318.    //} SYSTEMTIME; 
  319.       var year = this.year;
  320.       if (year < 100) {          // year is in this century
  321.          // determine the current century
  322.          if (new Date("1/1/1900").getYear() == 0)
  323.             year += 1900;
  324.          else if (new Date("1/1/2000").getYear() == 0)
  325.             year += 2000;
  326.          else {    // check all the centuries
  327.             for (var i = 100; i<=4000; i += 100) {
  328.                if (new Date("1/1/" + i).getYear() == 0)
  329.                   year += i;
  330.             }
  331.          }
  332.       }
  333.       var systime = "";
  334.       var strEx = new StringEx();
  335.       // year
  336.       systime += strEx.chr((year) % 256) +
  337.                 strEx.chr(parseInt((year)/256) % 256);
  338.       // month
  339.       systime += strEx.chr((this.month+1) % 256) + strEx.chr(0);
  340.       // dayOfWeek
  341.       systime += strEx.chr((this.day) % 256) + strEx.chr(0);
  342.       // day
  343.       systime += strEx.chr((this.date) % 256) + strEx.chr(0);
  344.       // hour
  345.       systime += strEx.chr((this.hour) % 256) + strEx.chr(0);
  346.       // minute
  347.       systime += strEx.chr((this.minute) % 256) + strEx.chr(0);
  348.       // second
  349.       systime += strEx.chr((this.second) % 256) + strEx.chr(0);
  350.       // millisecond
  351.       systime += strEx.chr(0) + strEx.chr(0);
  352.       return (systime);
  353.    }
  354. }