Skip to main content
Known Participant
February 5, 2018
Question

How do i change this?

  • February 5, 2018
  • 11 replies
  • 939 views

/*** Get the ISO week date week number */

Date.prototype.getWeek = function () {
    // Create a copy of this date object;
    var target  = new Date(this.valueOf());
    //var target  = new Date(this.getField("WeekBegin").value);

    // ISO week date weeks start on Monday;
    // so correct the day number;
    var dayNr   = (this.getDay() + 6) % 7;

    // ISO 8601 states that week 1 is the week;
    // with the first Thursday of that year.;
    // Set the target date to the Thursday in the target week;
    target.setDate(target.getDate() - dayNr + 3);

    // Store the millisecond value of the target date;
    var firstThursday = target.valueOf();

    // Set the target to the first Thursday of the year;
    // First set the target to January first
    target.setMonth(0, 1);
    // Not a Thursday? Correct the date to the next Thursday
    if (target.getDay() != 4) {
        target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);
    }

    // The weeknumber is the number of weeks between the
    // first Thursday of the year and the Thursday in the target week
    return 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000
}

var oDate = new Date(); // create date object;
var nWeekNumber = oDate.getWeek(); // get the week number for the date object;
//app.alert("For " + util.printd("ddmmyy", oDate) + " it is week " + nWeekNumber, 3, 0);

this.getField("WeekNumber").value = nWeekNumber;

Now I Want to be able to use the "weekbegin" field text box (ddmmyy) to work out the week number, but instead its using the current date.

What do I change to get it to use the "weekbegin" as the date instead of the current date it uses?

This topic has been closed for replies.

11 replies

WirepowerAuthor
Known Participant
February 7, 2018

I have another question:

I have this code in field:

var theSubject = this.getField("NAME").value +"'s week " + this.getField("WeekNumber").value + " Payslip from " + this.getField("WeekBegin").value + " To " + this.getField("WeekEnd").value 
this.mailDoc({ 
  bUI: false, 
  cTo: this.getField("Email1").value, 
  cCc: this.getField("Email2").value, 
  cSubject: theSubject, 
  cMsg: "This is " + this.getField("NAME").value +"'s week " + this.getField("WeekNumber").value + " Payslip from " + this.getField("WeekBegin").value + " To " + this.getField("WeekEnd").value

});

Now The WeekBegin and WeekEnd values or in the form of ddmmyy.

Is there a way I can change it to day dd/mm/yy only on this email though (when the field button is pressed).

Basically I just want to convert it for that instances and not let it effect the rest of the pdf.

WirepowerAuthor
Known Participant
February 5, 2018

Just tried it on Acrobat Reader and still doesn't work..

try67
Community Expert
Community Expert
February 5, 2018

Don't know what to tell you. It's working just fine on my end.

Did you press the button after changing the value of the first field?

WirepowerAuthor
Known Participant
February 5, 2018

I'm using Adobe Acrobat DC.

WirepowerAuthor
Known Participant
February 5, 2018

I just put 010118. hoping for 1 for week 1

try67
Community Expert
Community Expert
February 5, 2018

Works fine for me:

So after you click the button it still shows 6? What application did you open it in?

WirepowerAuthor
Known Participant
February 5, 2018

ok when I open your pdf, if I change the date it still shows 6 even after pressing button?

try67
Community Expert
Community Expert
February 5, 2018

Depends. What did you change it to?

WirepowerAuthor
Known Participant
February 5, 2018

isn't that the code in the Document JavaScript?

This one:

/*** Get the ISO week date week number */

Date.prototype.getWeek = function () {
    // Create a copy of this date object;
    var target  = new Date(this.valueOf());
    //var target  = new Date(this.getField("WeekBegin").value);

    // ISO week date weeks start on Monday;
    // so correct the day number;
    var dayNr   = (this.getDay() + 6) % 7;

    // ISO 8601 states that week 1 is the week;
    // with the first Thursday of that year.;
    // Set the target date to the Thursday in the target week;
    target.setDate(target.getDate() - dayNr + 3);

    // Store the millisecond value of the target date;
    var firstThursday = target.valueOf();

    // Set the target to the first Thursday of the year;
    // First set the target to January first
    target.setMonth(0, 1);
    // Not a Thursday? Correct the date to the next Thursday
    if (target.getDay() != 4) {
        target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);
    }

    // The weeknumber is the number of weeks between the
    // first Thursday of the year and the Thursday in the target week
    return 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000
}

try67
Community Expert
Community Expert
February 5, 2018

Yes. Did you put it there?
I just tried it myself and it's working fine... I don't know what you're doing to get it not to work.

See: WeekNumberTest.pdf - Google Drive

WirepowerAuthor
Known Participant
February 5, 2018

I put the code in the field. (as a "Refresh" button to be precise that way if I change the dates I can refresh)

WirepowerAuthor
Known Participant
February 5, 2018

nothing happens.

in JS Console I get this:

TypeError: oDate.getWeek is not a function

3:Field:Mouse Up

try67
Community Expert
Community Expert
February 5, 2018

You have to include the getWeek function definition with it...

WirepowerAuthor
Known Participant
February 5, 2018

opps, sorry fixed that.

so its now:

//var oDate = new Date(); // create date object;
var oDate = util.scand("ddmmyy", this.getField("WeekBegin").valueAsString); // create date object using WeekNumber input
var nWeekNumber = oDate.getWeek(); // get the week number for the date object;
//app.alert("For " + util.printd("ddmmyy", oDate) + " it is week " + nWeekNumber, 3, 0);

this.getField("WeekNumber").value = nWeekNumber;

But still no luck?

try67
Community Expert
Community Expert
February 5, 2018

Where did you put the code?

What does "still no luck" mean? What exactly happens? Is there an error message in the JS Console? If so, what does it say?

Details, please.

WirepowerAuthor
Known Participant
February 5, 2018

ok.

so I have this on the field "WeekNumber":

//var oDate = new Date(); // create date object;
var oDate = util.scand("ddmmyy", this.getField("WeekBegin").valueastring); // create date object using WeekNumber input
var nWeekNumber = oDate.getWeek(); // get the week number for the date object;
//app.alert("For " + util.printd("ddmmyy", oDate) + " it is week " + nWeekNumber, 3, 0);

this.getField("WeekNumber").value = nWeekNumber;

And I have this code at document level:

/*** Get the ISO week date week number */

Date.prototype.getWeek = function () {
    // Create a copy of this date object;
    var target  = new Date(this.valueOf());
    //var target  = new Date(this.getField("WeekBegin").value);

    // ISO week date weeks start on Monday;
    // so correct the day number;
    var dayNr   = (this.getDay() + 6) % 7;

    // ISO 8601 states that week 1 is the week;
    // with the first Thursday of that year.;
    // Set the target date to the Thursday in the target week;
    target.setDate(target.getDate() - dayNr + 3);

    // Store the millisecond value of the target date;
    var firstThursday = target.valueOf();

    // Set the target to the first Thursday of the year;
    // First set the target to January first
    target.setMonth(0, 1);
    // Not a Thursday? Correct the date to the next Thursday
    if (target.getDay() != 4) {
        target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);
    }

    // The weeknumber is the number of weeks between the
    // first Thursday of the year and the Thursday in the target week
    return 1 + Math.ceil((firstThursday - target) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000
}

Is this correct? as I'm still not getting anything?

try67
Community Expert
Community Expert
February 5, 2018

Yes. Why do you keep insisting on changing valueAsString to valueastring? The first exists, the second doesn't. JS is case-sensitive, plus you're missing an "s"...