[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Problem beim "Datum aktualisieren" Script

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Problem beim "Datum aktualisieren" Script

Uncle Tsebe
Beiträge gesamt: 205

26. Jan 2012, 16:36
Beitrag # 1 von 16
Bewertung:
(5723 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gemeinde,

ich bin da auf das Script "refresh_date-CS3.jsx" gestoßen.
Code
var myStyle = app.documents.firstItem().characterStyles.item("Datum+1");     
if (myStyle == null)
exit ();

//Format: Freitag, 20. Januar 2012

var d= new Date();
var myMonth = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
var myDay = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];
var myDate = myDay[d.getDay()*1 + 1] + "," + " " + [d.getDate()*1 + 1] + "." + " " + myMonth[d.getMonth()] + " " + (d.getYear()*1 +1900);

app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.appliedCharacterStyle = myStyle;
app.changeTextPreferences.changeTo = myDate;

app.documents.firstItem().changeText();

Dieses habe ich ein wenig modifiziert.
D. h. die Datumsanzeige ist nach dem Format "Tag, XX. Monat Jahr" gesetzt. Und es wird immer das aktuelle Datum +1 angezeigt.
Soweit funktioniert das auch.

Ich habe jetzt nur ein großes Problem:
Wenn ich z. B. am 31. Januar 2012 das Script ausführe wird statt dem 1. Februar der 32. Januar eingesetzt. Der Wochentag stimmt logischerweise.

Ich habe das jetzt getestet indem ich die lokale Systemzeit umgestellt habe...

Wie kann ich das Script ändern, damit auch der Monatsumschwung funktioniert.
Gibt es eine Möglichkeit auf ein externe Datumsquelle (in der auch das Schaltjahr berücksichtig wird) zuzugreifen?

Wäre super wenn mir hierzu jemand einen Tipp hätte.
Danke schon mal

Gruß,
Thomas

P.S: Das Script läuft auf WindowsXP unter InDesign CS4 (6.0.6)
X

Problem beim "Datum aktualisieren" Script

WernerPerplies
Beiträge gesamt: 2762

26. Jan 2012, 16:49
Beitrag # 2 von 16
Beitrag ID: #488647
Bewertung:
(5716 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Thomas,

in meinem Kalenderskript solltest Du alles finden, was Du brauchst.

Deine Frage nach dem Schaltjahr verstehe ich nicht. Das Schaltjahr wird doch automatisch durch die Date-Klasse berücksichtigt.

Damit Du nicht so lange suchen musst:

Code
main() 

function main()
{
var date = calculateDays(new Date(2012,0,31), 1);
alert(date);
return ;
}

function calculateDays(date, days)
{
var timeOfDate = date.getTime();
var timeOfDays = days*24 * 60 * 60 * 1000;
var calculatedDate = new Date()
calculatedDate.setTime(timeOfDate+timeOfDays);
return calculatedDate;
}



als Antwort auf: [#488645]
(Dieser Beitrag wurde von WernerPerplies am 26. Jan 2012, 17:00 geändert)

Problem beim "Datum aktualisieren" Script

Uncle Tsebe
Beiträge gesamt: 205

26. Jan 2012, 19:01
Beitrag # 3 von 16
Beitrag ID: #488651
Bewertung:
(5685 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

vielen Dank für die schnelle Antwort.

Mein Problem ist, dass ich einfach nur ein einfaches Script benötige das in einer bestimmten Zeile das Datum +1 einfügt. D. h. heute, Donnerstag, soll das Datum von Freitag drin stehen, nicht das heutige.
Das funktioniert ja soweit.
Nur da ich dem Script ja nur sage "rechne mir das aktuelle Datum und addiere 1" ist mir eigentlich klar wieso am Monatsende der 32. Januar eingefügt wird...

Daher die Frage wie ich das lösen kann, dass das Script nachschaut ob es einen Monatswechsel gibt.


Sorry, hab meine Frage am Anfang vielleicht etwas zu undeutlich beschrieben.

Könnte ich sowas über dein Kalenderscript lösen?
Hab mir das mal kurz angeschaut.
Ist doch recht komplex, die Geschichte und von Scripten habe ich leider Gottes wenig bis gar keine Ahnung.

Gruß,
Thomas


als Antwort auf: [#488647]

Problem beim "Datum aktualisieren" Script

WernerPerplies
Beiträge gesamt: 2762

26. Jan 2012, 19:15
Beitrag # 4 von 16
Beitrag ID: #488652
Bewertung:
(5678 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Thomas,

Datum +1:

Das sollte funktionieren:

main()

function main()
{
var date = calculateDays(new Date(), 1); <----------------
alert(date);
return ;
}

function calculateDays(date, days)
{
var timeOfDate = date.getTime();
var timeOfDays = days*24 * 60 * 60 * 1000;
var calculatedDate = new Date()
calculatedDate.setTime(timeOfDate+timeOfDays);
return calculatedDate;
}

Probiere das einfach mal aus, es würde mich sehr wundern, wenn da am 31. Januar der 32. Januar herauskäme.


als Antwort auf: [#488651]

Problem beim "Datum aktualisieren" Script

WernerPerplies
Beiträge gesamt: 2762

26. Jan 2012, 21:09
Beitrag # 5 von 16
Beitrag ID: #488653
Bewertung:
(5642 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Thomas,

so müsste das gewünschte Script funktionieren:

Code
main() 

/*void*/function main()
{
var myStyle = app.documents.firstItem().characterStyles.item("Datum+1");
if (myStyle == null) exit ();
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.appliedCharacterStyle = myStyle;
app.changeTextPreferences.changeTo = nextDayDate();
app.documents.firstItem().changeText();
return;
}
/*string*/function nextDayDate()
{
var d= calculateDays(new Date(), 1);
var month = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
var day = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];
return day[d.getDay()] + "," + " " + [d.getDate()] + "." + " " + month[d.getMonth()] + " " + (d. getFullYear ());
}

/*date*/function calculateDays(date, days)
{
var timeOfDate = date.getTime();
var timeOfDays = days*24 * 60 * 60 * 1000;
var calculatedDate = new Date()
calculatedDate.setTime(timeOfDate+timeOfDays);
return calculatedDate;
}



als Antwort auf: [#488652]

Problem beim "Datum aktualisieren" Script

gfellenz
Beiträge gesamt: 121

26. Jan 2012, 21:23
Beitrag # 6 von 16
Beitrag ID: #488654
Bewertung: ||
(5630 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Der erste Ansatz von Thomas war doch gar nicht so schlecht. Im folgenden korrigiert:


Code
function nextDayDate()  {  
var _jetzt = new Date();
var d= new Date(_jetzt.getFullYear(), _jetzt.getMonth(), _jetzt.getDate()+1); // datum + 1 tag

var month = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
var day = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];
return day[d.getDay()] + "," + " " + [d.getDate()] + "." + " " + month[d.getMonth()] + " " + (d. getFullYear ());
}


Man muss ein neues Datumsobjekt erstellen, anstatt einfach nur die Zahl 1 zum aktuellen Tag zu addieren.


als Antwort auf: [#488652]

Problem beim "Datum aktualisieren" Script

WernerPerplies
Beiträge gesamt: 2762

27. Jan 2012, 07:30
Beitrag # 7 von 16
Beitrag ID: #488659
Bewertung:
(5570 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gregor,

danke, wieder etwas gelernt.

Da muss man drauf kommen, wenn in der Beschreibung des Konstruktors steht:
day number (range: 1 - 31) ;-)

Aber es geht tatsächlich zum Beispiel auch:
-473, +1024

Hoffentlich wird die Funktionalität nicht mal der Doku angepasst.

Deshalb bleibe ich lieber bei meiner Funktion.


als Antwort auf: [#488654]

Problem beim "Datum aktualisieren" Script

WernerPerplies
Beiträge gesamt: 2762

27. Jan 2012, 07:53
Beitrag # 8 von 16
Beitrag ID: #488661
Bewertung:
(5564 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ach ja,

und noch eine Variante zur Stringumwandlung eines Datums:

Code
main()  

/*void*/function main()
{
alert(correctedGermanLocaleString(new Date()));
return;
}
/*function*/function correctedGermanLocaleString(date)
{
var dA = date.toLocaleString().replace(",","").split(" ");
return dA[0] + ", "+dA[2] +". " +dA[1] + " " + dA[3] ;

}


Aber Achtung:
Funktioniert nur, so lange die Ausgabe des Methode date.localeString() gleich bleibt, und die ist ja schon etwas gewöhnungsbedürftig.


als Antwort auf: [#488659]

Problem beim "Datum aktualisieren" Script

Uncle Tsebe
Beiträge gesamt: 205

27. Jan 2012, 07:57
Beitrag # 9 von 16
Beitrag ID: #488662
Bewertung:
(5561 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,
hallo Gregor,

vielen, vielen Dank für Eure Hilfe.

Funktioniert so wie ich mir das vorgestellt habe.

Ihr habt einen Menschen glücklich gemacht :-)

Danke und Gruß,
Thomas


als Antwort auf: [#488659]

Problem beim "Datum aktualisieren" Script

Martin Fischer
  
Beiträge gesamt: 12783

27. Jan 2012, 08:38
Beitrag # 10 von 16
Beitrag ID: #488668
Bewertung:
(5535 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gregor,

Antwort auf [ gfellenz ]
Code
function nextDayDate()  {  
var _jetzt = new Date();
var d= new Date(_jetzt.getFullYear(), _jetzt.getMonth(), _jetzt.getDate()+1); // datum + 1 tag

var month = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
var day = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];
return day[d.getDay()] + "," + " " + [d.getDate()] + "." + " " + month[d.getMonth()] + " " + (d. getFullYear ());
}




Hier noch eine Variante unter Verwendung des setDate()-Befehls:

Code
function nextDayDate()  {   
var d = new Date();
d.setDate(d.getDate() + 1);
var month = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
var day = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];
return day[d.getDay()] + "," + " " + [d.getDate()] + "." + " " + month[d.getMonth()] + " " + (d. getFullYear ());
}


Das sollte auch – von heute aus gesehen – noch in fünf Tagen funktionieren:

Code
nextDaysDate(5); 

function nextDaysDate(add_days) {
var d = new Date();
d.setDate(d.getDate() + add_days);
var month = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
var day = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];
return day[d.getDay()] + "," + " " + [d.getDate()] + "." + " " + month[d.getMonth()] + " " + (d. getFullYear ());
}



als Antwort auf: [#488654]

Problem beim "Datum aktualisieren" Script

pixxxelschubser
Beiträge gesamt: 1708

27. Jan 2012, 19:02
Beitrag # 11 von 16
Beitrag ID: #488713
Bewertung:
(5475 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat von WernerPerplies Ach ja,

und noch eine Variante zur Stringumwandlung eines Datums:

Code
main()  

/*void*/function main()
{
alert(correctedGermanLocaleString(new Date()));
return;
}
/*function*/function correctedGermanLocaleString(date)
{
var dA = date.toLocaleString().replace(",","").split(" ");
return dA[0] + ", "+dA[2] +". " +dA[1] + " " + dA[3] ;

}


Aber Achtung:
Funktioniert nur, so lange die Ausgabe des Methode date.localeString() gleich bleibt, und die ist ja schon etwas gewöhnungsbedürftig.


Und witzig ist sie auch noch, denn für Illu und InDesign sollte man die Ausgabeparameter dA[2] und dA[1] tauschen.

siehe Anhang

Wink


als Antwort auf: [#488661]
Anhang:
Datum-Unterschied.png (34.3 KB)

Problem beim "Datum aktualisieren" Script

WernerPerplies
Beiträge gesamt: 2762

27. Jan 2012, 19:07
Beitrag # 12 von 16
Beitrag ID: #488714
Bewertung:
(5473 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich kann das hier nicht überprüfen, aber dann braucht man es doch gar nicht umwandeln, oder?


als Antwort auf: [#488713]
(Dieser Beitrag wurde von WernerPerplies am 27. Jan 2012, 19:19 geändert)

Problem beim "Datum aktualisieren" Script

pixxxelschubser
Beiträge gesamt: 1708

27. Jan 2012, 19:25
Beitrag # 13 von 16
Beitrag ID: #488716
Bewertung:
(5464 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Jein.

dA würde ansonsten die Uhrzeit mitliefern.


als Antwort auf: [#488714]

Problem beim "Datum aktualisieren" Script

WernerPerplies
Beiträge gesamt: 2762

27. Jan 2012, 19:28
Beitrag # 14 von 16
Beitrag ID: #488717
Bewertung:
(5459 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ok, das hatte ich vergessen, also einfach nur die Zeit abschneiden, ginge ein Tick schneller.


als Antwort auf: [#488716]

Problem beim "Datum aktualisieren" Script

pixxxelschubser
Beiträge gesamt: 1708

27. Jan 2012, 22:56
Beitrag # 15 von 16
Beitrag ID: #488720
Bewertung:
(5409 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Illu CS3 ist da recht praktisch (hab hier keine aktuellere Version zum Testen). Du musst eigentlich nichts umwandeln. Und mit folgendem Zweizeiler auch nichts abschneiden.

Code
var dA = new Date().toLocaleDateString(); 
alert (dA);


siehe Anhang


als Antwort auf: [#488717]
Anhang:
Datum-Unterschied2.png (16.0 KB)
X