Easy A
Would you like to react to this message? Create an account in a few clicks or log in to continue.


 
HomeHome  Latest imagesLatest images  SearchSearch  RegisterRegister  Log inLog in  

Share
 

 Convert string to date

View previous topic View next topic Go down 
AuthorMessage
AllTheHits
Member
Member
avatar

Posts : 6
Join date : 2011-03-09

Convert string to date Empty
PostSubject: Convert string to date   Convert string to date EmptyWed May 11, 2011 10:13 pm

If you supply the following function with a date as a string '20/4/2011' and a corresponding format descriptor 'dd/m/yyyy' it will return another string in the format '2011/04/20'. This returned value can be used to create a valid Date variable.

Code:

var myDate = StringToDate('20/4/2011','dd/m/yyyy');
var actualDate;
if ( myDate != '' ) actualDate = new Date(myDate);

You can also supply a third argument to handle two digit years. (Note that it will not handle confusing formats such as 'ddm', but will correctly handle the variable lengths of month and day names.)
It requires ShortMths and ShortDays (but I've posted MonthNames and DayNames as well):

Code:

var MonthNames = ["January","February","March","April","May","June","July",
    "August","September","October","November","December"];
var DayNames = [ "Sunday","Monday","Tueday","Wednesday","Thursday","Friday","Saturday" ];
var ShortMths = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var ShortDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];

Code:

function StringToDate(sDate, sFormat, cutOff) {
    // Input: a date value as a string, it's format as a string e.g. 'dd-mmm-yy'
    // Optional: a cutoff (integer) for 2 digit years.
    // If no 'd' appears in the format string then the 1st of the month is assumed.
    // If the year is 20 and the cut-off is 30 then the value will be converted to 2020;
    // if the year is 40 then this will be converted to 1940.
    // If no cut-off is supplied then '20' will be pre-pended to the year (YY).
    // Output: a string in the format 'YYYY/MM/DD' or ''
    // Will not attempt to convert certain combinations e.g. DMM, MDD, DDM
    var sParsed, fndSingle;          // sParsed will be constructed in the format 'YYYY/MM/DD'
    sDate = sDate.toString().toUpperCase();
    sFormat = sFormat.toUpperCase();
   
    if (sFormat.search(/MMMM|MMM/) + 1) {      // replace Mar/March with 03, etc.
        sDate = sDate.replace(new RegExp('(' + ShortMths.join('|') + ')[A-Z]*', 'gi'), function(m){
            var i = ShortMths.indexOf(m.charAt(0).toUpperCase() + m.substr(1, 2).toLowerCase()) + 1;
            return ((i < 10) ? "0" + i : "" + i).toString();
        });
        sFormat = sFormat.replace(/MMMM|MMM/g, 'MM');
    }
    if (sFormat.search(/DDDD|DDD/) + 1) {      // replace Tue/Tuesday, etc. with ''
        sDate = sDate.replace(new RegExp('(' + ShortDays.join('|') + ')[A-Z]*', 'gi'), '');
        sFormat = sFormat.replace(/DDDD|DDD/g, '');
    }
    sDate = sDate.replace(/(^|\D)(\d)(?=\D|$)/g, function($0, $1, $2){   // single digits 2 with 02
        return $1 + '0' + $2;
    });
    sFormat = sFormat.replace(/(^|[^DMY])(D|M)(?=[^DMY]|$)/g, function($0, $1, $2){
        return $1 + $2 + $2;      // replace D or M with DD and MM
    });
    fndSingle = sFormat.search(/(^|[^D])D([^D]|$)|(^|[^M])M([^M]|$)/)+1;   // are there still single Ds or Ms?
    if ( fndSingle ) return '';      // do not attempt to parse, for example, 'DMM'
    sFormat = sFormat.replace(/(^|[^Y])(YY)(?=[^Y]|$)/g, function($0, $1, $2, index){
        var tempDate = sDate.substr(0, index + 1);
        tempDate += (cutOff) ? ((parseInt(sDate.substr(index + 1, 2)) > cutOff) ? '19' : '20') : '20';
        tempDate += sDate.substr(index + 1);
        sDate = tempDate;
        return $1 + $2 + $2;
    });
    sParsed = ('YYYY/MM/DD').replace(/YYYY|MM|DD/g, function(m){
        return (sFormat.indexOf(m) + 1) ? sDate.substr(sFormat.indexOf(m), m.length) : '';
    });
    if (sParsed.charAt(0) == '/') {    // if no year specified, assume the current year
        sParsed = (new Date().getFullYear()) + sParsed;
    }
    if (sParsed.charAt(sParsed.length - 1) == '/') { // if no date, assume the 1st of the month
        sParsed += '01';
    }
    return ( sParsed.length == 10 ) ? sParsed : '';   // should end up with 10 characters..
}

I have also used it to correctly sort tables by date columns. Andy.
Back to top Go down
 

Convert string to date

View previous topic View next topic Back to top 
Page 1 of 1

 Similar topics

-
» How to remove part of string?
» Obtain JS Requested Query String
» Create Multiple Date Values
» Problem when using ORDER BY a date field from MySQL
» Add a custom string property to a linklabel?Dear all I am totally new to visual C#. Whilst I can sort of manage console apps, I easily get lost when it comes to coding forms. I am currently making an "app launcher" which reads a text file line by line.

Permissions in this forum:You cannot reply to topics in this forum
Easy A :: Convert string to date Edit-trash Useless :: Trash-